题单【循环结构】

发布于:2025-07-21 ⋅ 阅读:(14) ⋅ 点赞:(0)

P1009 [NOIP 1998 普及组] 阶乘之和

P1009 [NOIP 1998 普及组] 阶乘之和 - 洛谷

高精度乘法与高精度加法;按照运算的顺序来 

#include<iostream>
#include<cstdio>
using namespace std;
int n,a[101]={0},s[101]={0};
void do_jiecheng(int x)
{
	int g=0;
	for(int i=100;i>=0;i--)
	//从末尾开始存,a[100]存的是个位数
	{
		a[i]=a[i]*x+g;    //两位相乘+进位(刚开始进位为0)
		g=a[i]/10;        //修改进位
		a[i]=a[i]%10;     //取模
	}
}
void jiecheng_add()
{
	int g=0;
	for(int i=100;i>=0;i--)
	{
		s[i]=s[i]+a[i]+g;
		g=s[i]/10;
		s[i]=s[i]%10;
	}
}
void output()
{
	int w;
	for(int i=0;i<=100;i++)
	{
		if(s[i]!=0)
		{
			w=i;
			break;
		}
	}
	for(int i=w;i<=100;i++)
	   printf("%d",s[i]);
}

int main()
{
	scanf("%d",&n);
	s[100]=a[100]=1;
	for(int i=2;i<=n;i++)
	{
		do_jiecheng(i);
		jiecheng_add();
	}
	output();
	return 0;
}

 

P1035 [NOIP 2002 普及组] 级数求和

P1035 [NOIP 2002 普及组] 级数求和 - 洛谷

【注意】浮点数除法要用“1.0”去除 

#include<bits/stdc++.h>
using namespace std;

int main()
{
	int n;
	cin>>n;
	int i;
	double sum=0;
	for(i=1;;i++)
	{
		sum+=1.0/i;       //注意这边是“1.0”
		if(sum>n)
		{
			break;
		}
	}
	cout<<i;
	return 0;
}

 

P2669 [NOIP 2015 普及组] 金币

P2669 [NOIP 2015 普及组] 金币 - 洛谷

 循环的嵌套

#include<bits/stdc++.h>
using namespace std;

int main()
{
	int k;
	cin>>k;
	
	long sum=0;
	int num=0;
	
	for(int i=0;;i++)
	{
		for(int j=1;j<=i;j++)
		{
			sum+=i;
			num++;
			if(num=k)
			{
				cout<<sum;
				return 0;
			}
		}
	}
	return 0;
}

 

P5723 【深基4.例13】质数口袋

P5723 【深基4.例13】质数口袋 - 洛谷

质数的判断;vector容器的应用;输出 

#include <bits/stdc++.h>
using namespace std;

bool isPrime(int n) {
    if (n < 2) return false;
    for (int j = 2; j * j <= n; j++) {
        if (n % j == 0) return false;
    }
    return true;
}

int main() {
    int L;
    cin >> L;

    if (L < 2) {  // L == 1 或更小,不可能存入质数
        cout << "0" << endl;
        return 0;
    }

    int sum = 0, num = 0;
    vector<int> primes;  // 存储所有装入的质数

    for (int i = 2; sum + i <= L; i++) {  // 遍历所有可能的质数
        if (isPrime(i)) {
            sum += i;
            primes.push_back(i);
            num++;
        }
    }

    for (int p : primes) {
        cout << p << endl;
    }

    cout << num << endl;  // 输出质数个数
    return 0;
}

 

P1217 [USACO1.5] 回文质数 Prime Palindromes

P1217 [USACO1.5] 回文质数 Prime Palindromes - 洛谷

一个一个生成回文数,再判断是否是质数 

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

bool prime(int x)
{
    bool b=true;
    for(int i=2;i<=sqrt(x);i++)
    {
        if(x%i==0)
            b=false;
    }
    return b;
}	//判断质数的函数

int main()
{
    int a,b;
    int c[100000];
    int i=3;
    int d1,d2,d3,d4,d5;
    c[0]=5;
	c[1]=7;
	c[2]=11;	//2位数和1位数只有这三个是回文质数
    
    for(d1=1;d1<=9;d1+=2)
        for(d2=0;d2<=9;d2++)
        {
            c[i]=d1*100+d2*10+d1;
            i++;
        }	//生成3位回文数

    for(d1=1;d1<=9;d1+=2)
        for(d2=0;d2<=9;d2++)
            for(d3=0;d3<=9;d3++)
            {
                c[i]=d1*10000+d2*1000+d3*100+d2*10+d1;
                i++;
            }	//生成5位回文数

    for(d1=1;d1<=9;d1+=2)
        for(d2=0;d2<=9;d2++)
            for(d3=0;d3<=9;d3++)
                for(d4=0;d4<=9;d4++)
                {
                    c[i]=d1*1000000+d2*100000+d3*10000+d4*1000+d3*100+d2*10+d1;
                    i++;
                }	//生成7位回文数

    for(d1=1;d1<=9;d1+=2)
        for(d2=0;d2<=9;d2++)
            for(d3=0;d3<=9;d3++)
                for(d4=0;d4<=9;d4++)
                    for(d5=0;d5<=9;d5++)
                    {
                        c[i]=d1*100000000+d2*10000000+d3*1000000+d4*100000+d5*10000+d4*1000+d3*100+d2*10+d1;
                        i++;
                    }	//生成9位回文数

    cin>>a>>b;//输入范围
    for(int i=0;i<100000000;i++)
    {
        if(c[i]>=a && c[i]<=b && prime(c[i])==true)
        {
            cout<<c[i]<<endl;
        }	//判断回文数是否是质数
        if(c[i]>b)
            break;	//当超出范围时及时退出循环
    }
}

P1307 [NOIP 2011 普及组] 数字反转

 P1307 [NOIP 2011 普及组] 数字反转 - 洛谷

(1)考虑负数——先输出符号,再取反;

(2)考虑0——直接输出;

(3)考虑1~9之间的数——直接输出;

(4)考虑其他数——先利用“%”和“/”,把每一位存入数组中;去除前导0;输出

#include<bits/stdc++.h>
using namespace std;

int main()
{
	int n;
	int a[11]={0};
	int i=0;
	cin>>n;
	if(n<0)
	{
		cout<<"-";
		n=-n;
	}
	if(n==0)
	{
		cout<<0;
		return 0;
	}
	
	if(n>0 && n<10)
	{
		cout<<n;
		return 0;
	}
	else
	{
		while(n!=0)
		{
			a[i]=n%10;
			n/=10;
			i++;
		}
	}
	int daff=0;
	for(int j=0;j<i;j++)
	{
		if(a[j]==0 && a[j+1]!=0)
		{
			daff=j+1;
			break;
		}
	}
	
	for(int j=daff;j<i;j++)
	{
		cout<<a[j];
	}
	return 0;
}

 另一种方法(更简单)

#include<bits/stdc++.h>
using namespace std;
int n,s=0;
int main()
{
    cin>>n;
    while(n) 
	{
		s=s*10+n%10;	//在s的末尾加一位
		n/=10;			//处理n
	}
    cout<<s;
    return 0;
}

 

P1720 月落乌啼算钱(斐波那契数列)

P1720 月落乌啼算钱(斐波那契数列) - 洛谷 

 斐波那契数列

#include<iostream>
using namespace std;
long long a=1,b=1,c=0;
int n,i;
int main()
{
    cin>>n;
    for (i=3;i<=n;i++)
    {
        c=a+b;
        a=b;
        b=c;
    }
    cout<<c<<".00";
    return 0;
}

 

P1420 最长连号

P1420 最长连号 - 洛谷

 【方法一】

#include<bits/stdc++.h>
using namespace std;

int main()
{
	int n;
	int a[1010]={0};
    cin>>n;
    
    for(int i=0;i<n;i++)
    {
    	cin>>a[i];
	}
	
	int num[1010]={0};
	int j=0;
	for(int i=0;i<n-1;i++)
	{
		if(a[i]+1==a[i+1])
		{
			num[j]++;
		}
		else
		{
			j++;
		}
	}
	
	int max=num[0];
	for(int i=0;i<=j;i++)
	{
		if(num[i]>max)
		{
			max=num[i];
		}
	}
	cout<<max+1;
    return 0;
}

【方法二】 

#include<bits/stdc++.h>
using namespace std;

int main()
{
	int n,x,y;
    cin>>n>>x;
    int num1=0,num2=1;
    
    for(int i=1;i<n;i++)
    {
    	cin>>y;
    	if(x+1==y)
    	{
    		num2++;
    		x=y;
		}
		else
		{
			if(num2>num1)
			{
				num1=num2;
				num2=1;
			}
			x=y;
		}
	}
	int maxn=max(num1,num2);
	cout<<maxn;
    return 0;
}

 

 P1075 [NOIP 2012 普及组] 质因数分解

P1075 [NOIP 2012 普及组] 质因数分解 - 洛谷

 在2~i*i<n之间找到的是较小的质数

#include<bits/stdc++.h>
using namespace std;

bool isPrime(int x)
{
	for(int i=2;i*i<=x;i++)
	{
		if(x%i==0)
			return 0;
	}
	return 1;
}

int main()
{
	int n;
    cin>>n;
    
    int p;
    for(int i=2;i*i<=n;i++)
    {
    	if(n%i==0 && isPrime(i)==true)
    	{
    		p=i;
    		break;
		}
	}
    cout<<n/p;
    return 0;
}

P5725 【深基4.习8】求三角形

P5725 【深基4.习8】求三角形 - 洛谷

 

 循环嵌套

#include<bits/stdc++.h>
using namespace std;

int main()
{
    int n;
    cin>>n;
    int m=1;
    for(int i=1;i<=n;i++)
    {
    	for(int j=1;j<=n;j++)
    	{
    		cout<<setfill('0')<<setw(2)<<m;
    		m++;
		}
		cout<<endl;	
	}
	
	cout<<endl;
	m=1;
	int num=1;
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=n-i;j++)
		{
			cout<<"  ";
		}
		for(int j=n-i+1;j<=n;j++)
		{
			cout<<setfill('0')<<setw(2)<<m;
			m++;
		}
		cout<<endl;
	}
    return 0;
}

 

P5726 【深基4.习9】打分

P5726 【深基4.习9】打分 - 洛谷

 double!!!

#include<bits/stdc++.h>
using namespace std;

int main()
{
	int n,a;
    cin>>n>>a;
    
    int sum=a;
    int max=a;
    int min=a;

    for(int i=2;i<=n;i++)
    {
    	cin>>a;
    	if(a>max)
    	{
    		max=a;
		}
    	if(a<min)
    	{
    		min=a;
		}
    	sum+=a;
	}
	
	sum-=max+min;
	double ans=(double)sum/(n-2);
	cout<<fixed<<setprecision(2)<<ans;
	
    return 0;
}

网站公告

今日签到

点亮在社区的每一天
去签到