总目录详见:https://blog.csdn.net/mrcrack/article/details/86501716
信息学奥赛一本通(C++版) 第一部分 C++语言 第四章 循环结构的程序设计
http://ybt.ssoier.cn:8088
第一节 for语句
//1059 求平均年龄
#include
int main(){
int n,a,i,sum=0;
scanf("%d",&n);
for(i=1;i<=n;i++){
scanf("%d",&a);
sum+=a;
}
printf("%.2lf",sum*1.0/n);
return 0;
}
//1060 均值
#include
int main(){
int n,i;
double a,sum=0;
scanf("%d",&n);
for(i=1;i<=n;i++){
scanf("%lf",&a);
sum+=a;
}
printf("%.4lf",sum/n);
return 0;
}
//1061 求整数的和与均值
#include
int main(){
int n,a,i,sum=0;
scanf("%d",&n);
for(i=1;i<=n;i++){
scanf("%d",&a);
sum+=a;
}
printf("%d %.5lf",sum,sum*1.0/n);
return 0;
}
//1062 最高的分数
#include
int main(){
int n,i,a,max=0;
scanf("%d",&n);
for(i=1;i<=n;i++){
scanf("%d",&a);
if(a>max)max=a;
}
printf("%d",max);
return 0;
}
//1063 最大跨度值
#include
int main(){
int max=0,min=9999,n,a,i;
scanf("%d",&n);
for(i=1;i<=n;i++){
scanf("%d",&a);
if(a>max)max=a;
if(a
printf("%d",max-min);
return 0;
}
//1064 奥运奖牌计数
#include
int main(){
int n,x,y,z,i,sum1=0,sum2=0,sum3=0;
scanf("%d",&n);
for(i=1;i<=n;i++){
scanf("%d%d%d",&x,&y,&z);
sum1+=x,sum2+=y,sum3+=z;
}
printf("%d %d %d %d\n",sum1,sum2,sum3,sum1+sum2+sum3);
return 0;
}
//1065 奇数求和
#include
int main(){
int m,n,i,sum=0;
scanf("%d%d",&m,&n);
for(i=m;i<=n;i++){
if(i%2==1)sum+=i;
}
printf("%d",sum);
return 0;
}
//1066 满足条件的数累加
#include
int main(){
int m,n,i,sum=0;
scanf("%d%d",&m,&n);
for(i=m;i<=n;i++)
if(i%17==0)
sum+=i;
printf("%d",sum);
return 0;
}
//1067 整数的个数
#include
int main(){
int n,i,a,cnt1=0,cnt2=0,cnt3=0;
scanf("%d",&n);
for(i=1;i<=n;i++){
scanf("%d",&a);
if(a==1)cnt1++;
else if(a==5)cnt2++;
else if(a==10)cnt3++;
}
printf("%d\n%d\n%d",cnt1,cnt2,cnt3);
return 0;
}
//1068 与指定数字相同的数的个数
#include
int main(){
int n,m,a,i,cnt=0;
scanf("%d%d",&n,&m);
for(i=1;i<=n;i++){
scanf("%d",&a);
if(a==m)cnt++;
}
printf("%d",cnt);
return 0;
}
//1069 乘方计算
#include
int main(){
int a,n,i,ans=1;
scanf("%d%d",&a,&n);
for(i=1;i<=n;i++)
ans*=a;
printf("%d",ans);
return 0;
}
//1070 人口增长
#include
int main(){
int x,n,i;
double ans;
scanf("%d%d",&x,&n);
ans=x;
for(i=1;i<=n;i++)
ans*=(1+0.001);
printf("%.4lf",ans);
return 0;
}
//1071 菲波那契数
//提交未通过,明白了,k=1,k=2的情况没考虑,修改,提交AC
#include
int main(){
int k,f1=1,f2=1,f3=1,i;// f3
scanf("%d",&k);
for(i=3;i<=k;i++){
f3=f1+f2;
f1=f2,f2=f3;
}
printf("%d",f3);
return 0;
}
//1072 鸡尾酒疗法
//提交,未通过,猜测,还是浮点运算出了问题,
//浮点比较运算时,一定要小心再小心。修改,提交AC,代码中,注释部分代码,提交未通过。
//浮点比较运算要当心。
#include
int main(){
int n,a,b,i;
double ans1,ans2;
scanf("%d",&n);
scanf("%d%d",&a,&b);
ans1=b*1.0/a;//ans1=b*1.0/a*100;
for(i=2;i<=n;i++){
scanf("%d%d",&a,&b);
ans2=b*1.0/a;// ans2=b*1.0/a*100;
if(ans1-ans2>0.05)printf("worse\n");//if(ans1-ans2>5)
else if(ans2-ans1>0.05)printf("better\n");//else if(ans2-ans1>5)
else printf("same\n");
}
return 0;
}
//1073 救援
#include
#include
int main(){
int n,m,i;
double x,y,t=0;
scanf("%d",&n);
for(i=1;i<=n;i++){
scanf("%lf%lf%d",&x,&y,&m);
t+=sqrt(x*x+y*y)*2/50+m*1.5;
}
if(t>(int)t)printf("%d",(int)t+1);
else printf("%d",(int)t);
return 0;
}
//1074 津津的储蓄计划
//http://ybt.ssoier.cn:8088/problem_show.php?pid=1074
//会模拟,才会编程,将样例1,样例2 模拟了一遍,可以开始编程
//样例通过,提交AC 2018-4-20
#include
int main(){
int a,i,sheng=0,cun=0;//a读入消费,sheng剩下的钱,cun存在妈妈那的钱
for(i=1;i<=12;i++){
scanf("%d",&a);
sheng+=300-a;
if(sheng<0){
printf("%d",-i);
return 0;
}
cun+=sheng/100*100;
sheng%=100;
}
printf("%d",sheng+cun/10*12);//请注意cun一定是100的整数倍,所以不必担心cun/10*12这个运算,求出的数据一定是精准的。
return 0;
}
//1074 津津的储蓄计划
#include
int main(){
int i,sheng=0,cun=0,a;
for(i=1;i<=12;i++){
scanf("%d",&a);
sheng+=300-a;
if(sheng<0){
printf("%d",-i);
return 0;
}
cun+=sheng/100*100;
sheng%=100;
}
printf("%d",sheng+cun*12/10);
return 0;
}
//1075 药房管理
//提交,未通过,修改,提交AC
#include
int main(){
int m,n,i,a,cnt=0;
scanf("%d%d",&m,&n);
for(i=1;i<=n;i++){
scanf("%d",&a);
if(m>=a){//此处写成 if(m>a)
m-=a;
cnt++;
}
}
printf("%d",n-cnt);
return 0;
}
//1076 正常血压
//一开始觉得题目有歧义,第一次测量算几小时,仔细研究样例,发现,第一次测量正常算1小时
#include
int main(){
int n,a,b,i,cnt=0,max=0;
scanf("%d",&n);
for(i=1;i<=n;i++){
scanf("%d%d",&a,&b);
if(90<=a&&a<=140&&60<=b&&b<=90){
cnt++;
if(cnt>max)max=cnt;
}else
cnt=0;
}
printf("%d",max);
return 0;
}
//1077 统计满足条件的4位数
#include
int main(){
int n,i,a,b,c,d,e,cnt=0;
scanf("%d",&n);
for(i=1;i<=n;i++){
scanf("%d",&e);
a=e/1000;
b=e%1000/100;
c=e%1000%100/10;
d=e%10;
if(d>a+b+c)cnt++;
}
printf("%d",cnt);
return 0;
}
//1078 求分数序列和
#include
int main(){
int n,p,q,i,t;
double ans=0;
scanf("%d",&n);
p=1,q=2;
for(i=1;i<=n;i++){
ans+=q*1.0/p;
t=p;
p=q;
q+=t;
}
printf("%.4lf",ans);
return 0;
}
//1079 计算分数加减表达式的值
#include
int main(){
int n,i;
double ans=0;
scanf("%d",&n);
for(i=1;i<=n;i++)
if(i%2==1)ans+=1.0/i;
else ans+=-1.0/i;
printf("%.4lf",ans);
return 0;
}
//1080 余数相同问题
#include
int main(){
int a,b,c,min=0,i;
scanf("%d%d%d",&a,&b,&c);
min=a>b?b:a;
min=min>c?c:min;//找最小值
for(i=2;i<=min;i++)
if(a%i==b%i&&b%i==c%i){
printf("%d",i);
break;
}
return 0;
}
//1081 分苹果
//小朋友拿到的苹果是连续自然数1,2,3,4,5,......
//高斯算法
#include
int main(){
int n;
scanf("%d",&n);
printf("%d",n*(n+1)/2);
return 0;
}
//1082 求小数的某一位
//可先在纸上进行除法运算,找规律,第一次的余数扩大10倍是第二次的被除数
//第二次的余数扩大10倍是第三次的被除数
//第n-1次的余数扩大10倍是第n次的被除数 2018-4-22 8:30
//样例通过,提交AC 2018-4-20
//提供几组测试样例
1 100 1
0
1 100 2
1
1 100 3
0
1 100 4
0
1 100 5
0
#include
int main(){
int a,b,n,i;//商 余数
scanf("%d%d%d",&a,&b,&n);
for(i=1;i<=n-1;i++){
a*=10;
a%=b;
}
printf("%d",a*10/b);
return 0;
}
//1082 求小数的某一位
//题目真好,已经让a //该题,首先要进行纸上模拟除法运算,之后再编码才能得心应手。
#include
int main(){
int a,b,n,i,shang;
scanf("%d%d%d",&a,&b,&n);
for(i=1;i<=n;i++){
a*=10;
shang=a/b;
a%=b;
}
printf("%d",shang);
return 0;
}
//1083 计算星期几
#include
int main(){
int a,b,i,ans=1;
scanf("%d%d",&a,&b);
for(i=1;i<=b;i++)
ans=(ans*a)%7;
switch(ans){
case 0:
printf("Sunday");
break;
case 1:
printf("Monday");
break;
case 2:
printf("Tuesday");
break;
case 3:
printf("Wednesday");
break;
case 4:
printf("Thursday");
break;
case 5:
printf("Friday");
break;
case 6:
printf("Saturday");
break;
}
return 0;
}
//1084 幂的末尾
//提交,未通过,重新读题,发现这句“若幂本身不足三位,在前面补零。”
//修改,提交AC
#include
int main(){
int a,b,i,ans=1;
scanf("%d%d",&a,&b);
for(i=1;i<=b;i++)
ans=(ans*a)%1000;
if(ans>=100)printf("%d",ans);
else if(10<=ans&&ans<100)printf("0%d",ans);
else printf("00%d",ans);
return 0;
}
2017-10-22 9:31 AC该节内容
第二节 while语句
//1085 球弹跳高度的计算
//画图理解,进行编码,效率会比较高。
//样例数据有误:
//正确如下
//输入:
//20
//输出:
//59.9219
//0.0195313
#include
int main(){
int h,i;
double sum=0,a;
scanf("%d",&h);
sum=h,a=1.0*h/2;
for(i=2;i<=10;i++){
sum+=a*2;
a/=2;
}
printf("%g\n%g",sum,a);
return 0;
}
//1086 角谷猜想
#include
int main(){
int n;
scanf("%d",&n);
while(n!=1){
if(n%2==1){
printf("%d*3+1=%d\n",n,n*3+1);
n=n*3+1;
}else{
printf("%d/2=%d\n",n,n/2);
n/=2;
}
}
printf("End");
return 0;
}
//1087 级数求和
#include
int main(){
int k,n=0;
double sn=0;
scanf("%d",&k);
while(sn<=k){
n++;
sn+=1.0/n;
}
printf("%d",n);
return 0;
}
//1088 分离整数的各个数
#include
int main(){
int n;
scanf("%d",&n);
while(n){
printf("%d ",n%10);
n/=10;
}
return 0;
}
//1089 数字反转
//0需要单独处理
#include
int main(){
int a;
scanf("%d",&a);
if(a==0){
printf("0");
return 0;
}
if(a<0){
printf("-");
a=-a;
}
while(a%10==0)a/=10;
while(a){
printf("%d",a%10);
a/=10;
}
return 0;
}
//1090 含k个3的数
#include
int main(){
int m,k,a,cnt=0;
scanf("%d%d",&m,&k);
a=m;
while(a){
if(a%10==3)cnt++;
a/=10;
}
if(cnt==k&&m%19==0)printf("YES");
else printf("NO");
return 0;
}
2017-10-22 12:13 AC该节内容
第三节 do-while语句
2017-10-22 12:13 AC该节内容
第四节 循环嵌套
//1091 求阶乘的和
#include
int f(int n){
int i,ans=1;
for(i=1;i<=n;i++)
ans*=i;
return ans;
}
int main(){
int n,i,sum=0;
scanf("%d",&n);
for(i=1;i<=n;i++)
sum+=f(i);
printf("%d",sum);
return 0;
}
//1092 求出e的值
#include
long long f(int n){
int i;
long long ans=1;
for(i=1;i<=n;i++)
ans*=i;
return ans;
}
int main(){
int n,i;
double e=0;
scanf("%d",&n);
for(i=0;i<=n;i++)
e+=1.0/f(i);
printf("%.10lf",e);
return 0;
}
//1093 计算多项式的值
//该题要小心,n<=10^6,一不小心,要超时 ,一开始很轻松编出代码,但测试中发现超时
//马上进行修改,提交 未通过,将float全改成double ,提交AC,上了题目的当,题中说
//"保证最终结果在float范围内",瞎扯,记住了用double不会错。
#include
int main(){
int i,n;
double x,ans=1,t=1;
scanf("%lf%d",&x,&n);
for(i=1;i<=n;i++){
t*=x;
ans+=t;
}
printf("%.2lf",ans);
return 0;
}
//1094 与7无关的数
#include
int f(int n){
if(n%7==0)return 1;
while(n){
if(n%10==7)return 1;
n/=10;
}
return 0;
}
int main(){
int n,i,ans=0;
scanf("%d",&n);
for(i=1;i<=n;i++)
if(f(i)==0)
ans+=i*i;
printf("%d",ans);
return 0;
}
//1095 数1的个数
#include
int f(int n){
int cnt=0,i;
while(n){
if(n%10==1)cnt++;
n/=10;
}
return cnt;
}
int main(){
int i,cnt=0,n;
scanf("%d",&n);
for(i=1;i<=n;i++)
cnt+=f(i);
printf("%d",cnt);
return 0;
}
//1096 数字统计
#include
int f(int n){
int i,cnt=0;
while(n){
if(n%10==2)cnt++;
n/=10;
}
return cnt;
}
int main(){
int left,right,i,ans=0,cnt=0;
scanf("%d%d",&left,&right);
for(i=left;i<=right;i++){
cnt+=f(i);
}
printf("%d",cnt);
return 0;
}
//1097 画矩形
//提交,未通过,一测试,发现是自己编码的问题,修改,提交AC
#include
int main(){
int row,col,i,j,cmd;
char s[2];
scanf("%d%d%s%d",&row,&col,s,&cmd);
if(cmd==1)
for(i=1;i<=row;i++){
for(j=1;j<=col;j++){
printf("%c",s[0]);
}
printf("\n");
}
else{
for(j=1;j<=col;j++)
printf("%c",s[0]);
printf("\n");
for(i=2;i<=row-1;i++){
for(j=1;j<=col;j++)
if(j==1||j==col)
printf("%c",s[0]);
else
printf(" ");
printf("\n");
}
for(j=1;j<=col;j++)
printf("%c",s[0]);
printf("\n");
}
return 0;
}
//1098 质因数分解
#include
int main(){
int n,i;
scanf("%d",&n);
for(i=2;i*i<=n;i++)
if(n%i==0){
printf("%d",n/i);
break;
}
return 0;
}
//1099 第n小的质数
//样例解释2 3 5 7 11 13 17 19 23 29
#include
int isPrime(int n){
int i;
if(n<2)return 0;
if(n==2)return 1;
for(i=2;i*i<=n;i++)
if(n%i==0)return 0;
return 1;
}
int main(){
int n,k=2,cnt=1;
scanf("%d",&n);
while(cnt
while(isPrime(k)==0)k++;
cnt++;
}
printf("%d",k);
return 0;
}
//1100 金币
#include
int main(){
int n,ans=0,i,d=0;
scanf("%d",&n);
for(i=1;i<=n;i++){
d+=i;
ans+=i*i;
if(d>=n)
break;
}
if(d==n)printf("%d",ans);
else printf("%d",ans-(d-n)*i);
return 0;
}
//1101 不定方程求解
//思路 枚举
#include
int main(){
int a,b,c,cnt=0,i,j;
scanf("%d%d%d",&a,&b,&c);
for(i=0;i<=c;i++)
for(j=0;j<=c;j++)
if(a*i+b*j==c)cnt++;
else if(a*i+b*j>c)break;
printf("%d",cnt);
return 0;
}
2017-10-22 14:05 AC该节内容
2017-10-22 14:05 AC该章节内容