题单【循环结构】
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;
}