洛谷题单代码参考【入门3 循环结构】

本文汇总了洛谷平台的一系列编程题目,涉及循环结构的运用,包括寻找最小值、计算平均值、数字序列的处理、高精度算法、级数求和等。通过实例代码解析,展示了如何运用循环、条件判断和数学逻辑解决编程问题,旨在提升编程思维和算法能力。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

洛谷题单代码参考【入门3 循环结构】

  • 找最小值
  • 分类平均
  • 一尺之棰
  • 数字直角三角形
  • 阶乘之和【普及题,高精度算法–>大整数乘法和加法的运用】
  • 计数问题
  • 级数求和
  • 金币
  • 数列求和
  • 质数口袋 (普及题)
  • 回文质数(普及题)
  • 小玉在游泳
  • 数字反转
  • 月落乌啼算钱(斐波那契数列)
  • 求极差/最大跨度值
  • 最长连号
  • 质因数分解
  • 求三角形
  • 打分(普及题)
  • Davor
  • 津津的存储计划
#include <iostream>
using namespace std;

int num[1005] = {1001};

int main(){
	int n, nMin = 1001; 
	cin >> n;
	for(int i = 0; i < n; i++){
		cin >> num[i];
		nMin = min(nMin, num[i]);
	}
	cout << nMin << endl;
	
	return 0;
}

#include <iostream>
#include <iomanip>
using namespace std;

int main(){
	int n, k, countA = 0, countB = 0;
	double A = 0.0, B = 0.0;
	cin >> n >> k;
	for(int i = 1; i <= n; i++){
		if(i % k == 0){
			A += i;
			++countA; 
		} else {
			B += i;
			++countB;
		}
	}
	
	cout << fixed << setprecision(1) << A / countA << " " << B / countB << endl;
	
	return 0;
}

#include <iostream>
#include <cmath>
using namespace std;

int main(){
	int n, day = 1; 
	cin >> n;
	while(n > 1){
		n  /= 2;
		++day;
	}
	cout << day << endl;
	
	return 0;
}

#include <iostream>
using namespace std;

int main(){
	int n, num = 1;
	cin >> n;
	for(int i = 0; i < n; i++){
		for(int j = 0; j < n - i; j++){
			if(num < 10){
				cout << 0 << num++;
			} else {
				cout << num++;
			}
		}
		cout << endl;
	} 
	
	return 0;
}

5.题解注意看注释,这里建议先了解一下高精度算法

#include <iostream>
using namespace std;

int num[105] = {0}, ans[205] = {0};

int main(){
	int n, temp = 0, digit = 0;
	cin >> n;
	num[105] = ans[105] = 1;
	for(int i = 2; i <= n; i++){ //控制循环层数,也就是阶乘数 
		for(int j = 105; j >= 0; j--){//高精度乘法,倒存,105位够了 
			num[j] = num[j] * i + temp;
			temp = num[j] / 10; //直接取需要进位的数
			num[j] = num[j] % 10; //进位后剩下最后一个个位数  
		}
		temp = 0; 
		for(int j = 105; j >= 0; j--){//高精度加法,阶乘数相加 
			ans[j] += num[j] + temp;
			temp = ans[j] / 10;
			ans[j] = ans[j] % 10;
		}
	}
	//输出的处理 
	for(int j = 0; j <= 105; j++){//因为ans是倒存的,所以要算出非零到哪一位 
			if(ans[j] != 0){
				digit = j;
				break;
			}
		}
	for(int i = digit; i <= 105; i++){
		cout << ans[i];
	}
	
	return 0;
}

#include <iostream>
using namespace std;

int main(){
    int k, i = 0;
    double sumN = 0;
    cin >> k;
    while(sumN <= k){
        ++i;
        sumN = 1.0 / i + sumN;
    }
    cout << i << endl;
}
#include <iostream>
using namespace std;

int main(){
    int k, i = 0;
    double sumN = 0;
    cin >> k;
    while(sumN <= k){
        ++i;
        sumN = 1.0 / i + sumN;
    }
    cout << i << endl;
}
#include <iostream>
using namespace std;

int main(){
    int k, gold = 0;
    cin >> k;
    for(int i = 1; i <= k; i++){//控制是当天是i枚金币
        for(int j = 0; j < i; j++){//控制i枚金币的天数
            gold += i;
            --k;
        }
    }
    cout << gold << endl;

    return 0;
}


#include <iostream>
using namespace std;

int main(){
	int n, sumN = 0;
	cin >> n;
	for(int i = 1; i <= n; i++){
		sumN += i;
	} 
	cout << sumN << endl;
	
	return 0;
} 

#include <iostream>
#include <cmath>
using namespace std;

int prime[10005] = {0};

int isPrime(int n){
    if(n == 2 || n == 3){
        return 1;
    } else if((n == 1) || ((n % 6 != 1) && (n % 6 != 5))){
        return 0;
    }
    for(int i = 5; i <= sqrt(n); i += 6){
        if((n % i == 0) || (n % (i + 2) == 0)){
            return 0;
        }
    }
    return 1;
}
int main(){
    int L, sumP = 0, countP = 0;
    cin >> L;
    for(int i = 2, j = 0; sumP + i <= L; i++){
        if(isPrime(i)){
            prime[j++] = i;
            sumP += i;
            ++countP;
        }
    }
    for(int i = 0; prime[i] != 0; i++){
        cout << prime[i] << endl;
    }
    cout << countP << endl;

    return 0;
}

#include <iostream>
#include <cmath>
using namespace std;
//b<=10000000这个判断条件来自:除了11以外,一个数的位数是偶数的话,不可能为回文数素数。
//如果一个回文素数的位数是偶数,则它的奇数位上的数字和与偶数位上的数字和必然相等;
//根据数的整除性理论,容易判断这样的数肯定能被11整除,所以它就不可能是素数。
int isPrime(int n);
int isBack(int n);
int main(){
	int a, b, pcount = 0, bcount = 0;
	cin >> a >> b;
	b = b >= 10000000 ? 9999999 : b;
	for(int i = a; i <= b; i++){
        if(isBack(i) && isPrime(i)){
            cout << i << endl;
        }
	}


	return 0;
}
int isPrime(int n){
	if(n == 2 || n == 3){
		return 1;
	} else if((n == 1) || (n % 6 != 1 && n % 6 != 5)){
		return 0;
	}
	for(int i = 5; i <= sqrt(n); i += 6){
		if((n % i == 0) || (n % (i + 2) == 0)){
            return 0;
		}
	}
	return 1;
}
int isBack(int n){
	int temp = n, num = 0;
	while(temp > 0){
		num = num * 10 + temp % 10;
		temp /= 10;
	}
	return num == n ? 1: 0;
}

#include <iostream>
using namespace std;

int main(){
    int step = 1;
    double m, yuM = 2.0, temp = 2.0;
    cin >> m;
    while(yuM < m){
        temp = temp * 0.98;
        yuM += temp;
        ++step;
    }
    cout << step << endl;

    return 0;
}

#include <iostream>
#include <string>
#include <algorithm>
using namespace std;

int main(){
    long long num = 0;
    int n, isFlag = 0, temp = 0;
    cin >> n;
    while(!isFlag && (n != 0)){
        if(n % 10 == 0){
            n /= 10;
        } else{
            isFlag = 1;
        }
    }
    isFlag = n >= 0 ? 1 : 0; //判断n是正数还是复数
    temp = abs(n);
    while(temp > 0){
        num = num * 10 + temp % 10;
        temp /= 10;
    }
    if(isFlag){
        cout << num << endl;
    } else {
        cout << -num << endl;
    }


    return 0;
}

#include <iostream>
#include <cmath>
#include <iomanip>
using namespace std;

int main(){
    int n;
    double fn = 0.0;
    cin >> n;
    fn = (pow(((1+sqrt(5)) / 2), n) - pow(((1-sqrt(5)) / 2), n)) / sqrt(5);
    cout << fixed << setprecision(2) << fn << endl;

    return 0;
}

#include <iostream>
using namespace std;

int ans[1005] = {0};

int main(){
    int n, maxN = -1, minN = 1001;
    cin >> n;
    for(int i = 0; i < n; i++){
        cin >> ans[i];
        maxN = max(maxN, ans[i]);
        minN = min(minN, ans[i]);
    }
    cout << maxN - minN << endl;

    return 0;
}

#include <iostream>
using namespace std;

int ans[100005];

int main(){
    int n, step = 1, maxStep = 1;
    cin >> n;
    for(int i = 0; i < n; i++){
        cin >> ans[i];
    }
    for(int i = 0; ans[i]; i++){
        if(ans[i] + 1 == ans[i + 1]){
            ++step;
        } else {
            step = 1;
        }
        maxStep = max(step, maxStep);
    }
    cout << maxStep << endl;

    return 0;
}

#include <iostream>
#include <cmath>
using namespace std;

int isPrime(int n);
int main(){
    int n, maxPrime = 0;
    cin >> n;
    for(int i = 2; i <= n; i++){
        if(isPrime(i)){
            for(int j = 2; j <= n; j++){
                if((i * j == n) && isPrime(j)){
                    maxPrime = i > j ? i : j;
                }
            }
        }
    }
    cout << maxPrime << endl;

    return 0;
}
int isPrime(int n){
    if(n == 2 || n == 3){
        return 1;
    } else if((n == 1) || ((n % 6 != 1) && (n % 6 != 6))){
        return 0;
    }
    for(int i = 5; i <= sqrt(n); i += 6){
        if(n % i == 0 || n % (i + 2) == 0){
            return 0;
        }
    }
    return 1;
}

#include <iostream>
using namespace std;

int main(){
    int n, num = 1;
    cin >> n;
    //打印正方形
    for(int i = 0; i < n; i++){
        for(int j = 0; j < n; j++){
            if(num < 10){
                cout << 0 << num++;
            } else {
                cout << num++;
            }
        }
        cout << endl;
    }
    cout << endl;
    num = 1;
    //打印三角形
    for(int i = 0; i < n; i++){
        for(int j = 0; j < n - i - 1; j++){
            cout << "  ";
        }
        for(int j = 0; j <= i; j++){
            if(num < 10){
                cout << 0 << num++;
            } else {
                cout << num++;
            }
        }
        cout << endl;
    }

    return 0;
}

#include <iostream>
#include <iomanip>
using namespace std;

int ans[1005] = {0};

int main(){
    int n, maxInd = 0, minInd = 0, sumN = 0;
    cin >> n;
    for(int i = 0; i < n; i++){
        cin >> ans[i];
        if(ans[maxInd] < ans[i]){
            maxInd = i;
        }
        if(ans[minInd] > ans[i]){
            minInd = i;
        }
    }
    ans[maxInd] = 0;
    ans[minInd] = 0;
    for(int i = 0; i < n; i++){
        sumN += ans[i];
    }
    cout << fixed << setprecision(2) << 1.0 * sumN / (n - 2) << endl;

    return 0;
}

#include <iostream>
using namespace std;

int main(){
    int n, weekMoney = 0, isFlag = 1, k = 1;
    cin >> n;
    weekMoney = n / 52; //算出每周需要多少钱
    while(isFlag){
    	for(int x = 100; x > 0; x--){//取x最大,所以x倒着数
	    	if((7 * x + 21 * k) == weekMoney){//一周的数相加
	    		cout << x << endl << k << endl;
	    		isFlag = 0;
			}
		}
	    ++k;
	}



    return 0;
}

#include <iostream>
using namespace std;

int month[13] = {0};

int main(){
    int free = 0, save = 0, isFlag = 1;
    for(int i = 1; i < 13; i++){
        cin >> month[i];
    }
    for(int i = 1; i < 13; i++){
    	free += 300;
        if(free < month[i]){
            cout << -i << endl;
            isFlag = 0;
            break;
        }
        free -= month[i];
        if(free >= 100){
            int temp = free / 100;
            save += temp * 100;
            free = free - temp * 100;
        }

    }
    if(isFlag){
        save = save * 0.2 + save + free;
        cout << save << endl;
    }


    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值