信息学奥赛一本通
第一部分:C++语言
第一章 C++语言入门
1000:入门测试题目
#include<iostream> using namespace std; int main() { int a,b; cin>>a>>b; cout<<a+b; return 0; }
1001:Hello,World!
#include<iostream> using namespace std; int main() { cout<<"Hello,World!"; return 0; }
1002:输出第二个整数
#include<iostream> using namespace std; int main() { int a,b,c; cin>>a>>b>>c; cout<<b; return 0; }
1003:对齐输出
#include<iostream> #include<bits/stdc++.h> using namespace std; int main() { int a,b,c; cin>>a>>b>>c; cout<<fixed<<setw(8)<<a<<' '; cout<<fixed<<setw(8)<<b<<' '; cout<<fixed<<setw(8)<<c; return 0; }
1004:字符三角形
#include<iostream> using namespace std; int main() { char ch; cin>>ch; cout<<" "<<ch<<' '; cout<<" "<<ch<<ch<<ch<<' '; cout<<ch<<ch<<ch<<ch<<ch<<' '; return 0; }
1005:地球人口承载力估计
#include<cstdio> int main(){ int a,b,x,y; double z; scanf("%d %d %d %d",&x,&a,&y,&b); z=(a*x-b*y)/(a-b); printf("%.2f",z); return 0; }
第二章 顺序结构程序设计
第一节 运算符和表达式
1006:A+B问题
#include<iostream> using namespace std; int main() { int a,b; cin>>a>>b; cout<<a+b; return 0; }
1007:计算(a+b)×c的值
#include<iostream> using namespace std; int main(){ int a,b,c; cin>>a>>b>>c; cout<<(a+b)*c<<endl; return 0; }
1008:计算(a+b)/c的值
#include<iostream> using namespace std; int main() { int a,b,c; cin>>a>>b>>c; cout<<(a+b)/c; return 0; }
1009:带余除法
#include<iostream> using namespace std; int main() { int bcs,cs,s,ys; cin>>bcs>>cs; s=bcs/cs; ys=bcs%cs; cout<<s<<' '<<ys; return 0; }
1010:计算分数的浮点数值
#include<iostream> #include<iomanip> using namespace std; int main() { double a,b; cin>>a>>b; cout<<fixed<<setprecision(9)<<a/b; return 0; }
第二节 常量和变量
1011:甲流疫情死亡率
#include<iostream> #include<iomanip> using namespace std; int main(){ int a,b; cin>>a>>b; cout<<fixed<<setprecision(3)<<100.0*b/a<<'%'<<endl; return 0; }
1012:计算多项式的值
#include<iostream> #include<iomanip> using namespace std; int main(){ double x,a,b,c,d; cin>>x>>a>>b>>c>>d; cout<<fixed<<setprecision(7)<<x*(x*(a*x+b)+c)+d; return 0; }
1013:温度表达转化
#include<iostream> #include<iomanip> using namespace std; int main(){ double f; cin>>f; cout<<fixed<<setprecision(5)<<(f-32)/9*5; return 0; }
1014:与圆相关的计算
#include<iostream> using namespace std; #include<iomanip> int main() { double r,pi=3.14159,d,c,s; cin>>r; d=r*2; c=pi*2*r; s=pi*r*r; cout<<fixed<<setprecision(4)<<d; cout<<' '<<fixed<<setprecision(4)<<c; cout<<' '<<fixed<<setprecision(4)<<s; return 0; }
1015:计算并联电阻的阻值
#include<iostream> using namespace std; #include<iomanip> // int main(){ float r1,r2; cin>>r1>>r2; cout<<fixed<<setprecision(2)<<r1*r2/(r1+r2); return 0; }
第三节 标准数据类型
1016:整型数据类型存储空间大小
#include<iostream> using namespace std; //#include<iomanip> fixed<<setprecision int main(){ cout<<sizeof(int)<<' '<<sizeof(short)<<endl; return 0; }
1017:浮点型数据类型存储空间大小
#include<iostream> using namespace std; //#include<iomanip> fixed<<setprecision int main(){ cout<<sizeof(float)<<' '<<sizeof(double)<<endl; return 0; }
1018:其他数据类型存储空间大小
#include<iostream> using namespace std; //#include<iomanip> fixed<<setprecision int main(){ cout<<sizeof(bool)<<' '<<sizeof(char)<<endl; return 0; }
1019:浮点数向零舍入
#include<iostream> using namespace std; //#include<iomanip> fixed<<setprecision int main(){ float a; int b; cin>>a; b=int(a); cout<<b<<endl; return 0; }
1020:打印ASCII码
#include<iostream> using namespace std; //#include<iomanip> fixed<<setprecision int main(){ char ch; cin>>ch; cout<<ch+0<<endl; return 0; }
1021:打印字符
#include<iostream> using namespace std; //#include<iomanip> fixed<<setprecision int main(){ int n; cin>>n; cout<<char(n)<<endl; return 0; }
1022:整型与布尔型的转换
#include<iostream> using namespace std; int main(){ int n; bool bl; cin>>n; bl=bool(n); n=bl; cout<<n<<endl; return 0; }
1023:Hello,World!的大小
#include<iostream> using namespace std; int main(){ cout<<sizeof("Hello, World!"); return 0; }
第四节 数据输入输出
1024:保留3位小数的浮点数
#include<iostream> #include<iomanip> using namespace std; int main(){ float a; cin>>a; cout<<fixed<<setprecision(3)<<a<<endl; return 0; }
1025:保留12位小数的浮点数
#include<iostream> #include<iomanip> using namespace std; int main(){ double a; cin>>a; cout<<fixed<<setprecision(12)<<a<<endl; return 0; }
1026:空格分隔输出
#include<iostream> #include<iomanip> using namespace std; int main(){ char a; int b; float c; double d; cin>>a>>b>>c>>d; cout<<a<<' '<<b<<' '<<fixed<<setprecision(6)<<c<<' '<<d<<endl; return 0; }
1027:输出浮点数
#include<cstdio> using namespace std; int main(){ double a; scanf("%lf",&a); printf("%lf %.5lf %e %g",a,a,a,a); return 0; }
1028:字符菱形
#include<iostream> using namespace std; int main(){ int flag=0,m=3; char ch; cin>>ch; for(int i=1;i<=2*m-1;i++) { int tmpi=i>m?2*m-i:i; for(int j=1;j<m+1-tmpi;j++) cout<<' '; for(int j=1;j<=2*tmpi-1;j++) cout<<ch; cout<<' '; } return 0; }
第五节 顺序结构实例
1029:计算浮点数相除的余
#include<iostream> using namespace std; #include<cmath> int main() { double a,b; cin>>a>>b; int k=floor(a/b); cout<<a-k*b; return 0; }
1030:计算球的体积
#include<iostream> #include<iomanip> using namespace std; const double pi=3.14; int main(){ double r; cin>>r; cout<<fixed<<setprecision(2)<<4*pi/3*r*r*r<<endl; return 0; }
1031:反向输出一个三位数
#include<iostream> using namespace std; int main(){ int a; cin>>a; do { cout<<a%10; a/=10; }while(a); return 0; }
1032:大象喝水查
#include<iostream> using namespace std; const double pi=3.14159; int main(){ int h,r; cin>>h>>r; cout<<int(20000/(pi*r*r*h))+1; return 0; }
1033:计算线段长度
#include<iostream> #include<cmath> #include<iomanip> using namespace std; int main(){ double xa,ya,xb,yb; cin>>xa>>ya>>xb>>yb; cout<< fixed<<setprecision(3)<<sqrt((xa-xb)*(xa-xb)+(ya-yb)*(ya-yb)); return 0; }
1034:计算三角形面积
#include<iostream> #include<cmath> #include<iomanip> using namespace std; double jl(double x1,double y1,double x2,double y2) { return sqrt((x1-x2)*(x1-x2)+(y2-y1)*(y2-y1)); } int main(){ double x1,y1,x2,y2,x3,y3,p,a,b,c,s; cin>>x1>>y1>>x2>>y2>>x3>>y3; a=jl(x1,y1,x2,y2); b=jl(x2,y2,x3,y3); c=jl(x1,y1,x3,y3); p=(a+b+c)/2; s=sqrt(p*(p-a)*(p-b)*(p-c)); cout<<fixed<<setprecision(2)<<s<<endl; return 0; }
1035:等差数列末项计算
#include<iostream> using namespace std; int main(){ int a1,a2,n; cin>>a1>>a2>>n; cout<<a1+(n-1)*(a2-a1); return 0; }
1036:A×B问题
#include<iostream> using namespace std; #include<cmath> int main() { int a,b; cin>>a>>b; cout<<1ll*a*b; return 0; }
1037:计算2的幂
#include<iostream> using namespace std; int main(){ int n; cin>>n; long long m=1; for(int i=1;i<=n;i++)m*=2; cout<<m<<endl; return 0; }
1038:苹果和虫子
#include<iostream> using namespace std; int main(){ int n,x,y,m; cin>>n>>x>>y; m=n-1.0*y/x; if(m<0)m=0; cout<<m<<endl; return 0; }
第三章 程序的控制结构
第一节 if选择结构
1039:判断数正负
#include<iostream> using namespace std; int main(){ int n; cin>>n; if(n>0)cout<<"positive"; else cout<<(n==0?"zero":"negative")<<endl; return 0; }
1040:输出绝对值
#include<iostream> #include<iomanip> using namespace std; int main(){ double a; cin>>a; cout<<fixed<<setprecision(2)<<(a>0?a:a*(-1)); return 0; }
1041:奇偶数判断
#include<iostream> using namespace std; int main(){ long a; cin>>a; cout<<(a%2?"odd":"even"); return 0; }
1042:奇偶ASCII值判断
#include<cstdio> int main() { if(getchar()%2)printf("YES"); else printf("NO"); return 0; }
1043:整数大小比较
#include<iostream> using namespace std; int main(){ long long a,b; cin>>a>>b; if(a>b)cout<<'>'; else cout<<(a==b?'=':'<'); return 0; }
1044:判断是否为两位数
#include<iostream> using namespace std; int main(){ short n; cin>>n; if(n>=10&&n<=99)cout<<1; else cout<<0; return 0; }
1045:收集瓶盖赢大奖
#include<iostream> using namespace std; int main(){ double a,b; cin>>a>>b; if(a>=10||b>=20)cout<<1; else cout<<0; return 0; }
1046:判断一个数能否同时被3和5整除
#include<iostream> using namespace std; int main(){ long long n; cin>>n; if(n%3==0&&n%5==0)cout<<"YES"; else cout<<"NO"; return 0; }
1047:判断能否被3,5,7整除
#include<iostream> using namespace std; int main(){ long long n; cin>>n; if(n%3==0&&n%5==0)cout<<"YES"; else cout<<"NO"; return 0; }
1048:有一门课不及格的学生
#include<iostream> using namespace std; int main(){ long long n; cin>>n; if(n%3==0&&n%5==0)cout<<"YES"; else cout<<"NO"; return 0; }
第二节 switch语句
1049:晶晶赴约会
#include<iostream> using namespace std; int main() { int n; cin>>n; if(n==1||n==3||n==5)cout<<"NO"; else cout<<"YES"; return 0; }
1050:骑车与走路
#include<iostream> using namespace std; int main(){ double x,b,w; cin>>x; b=27+23+x/3; w=x/1.2; if(w>b)cout<<"Bike"; else cout<<(w==b?"All":"Walk"); return 0; }
1051:分段函数
#include<iostream> #include<iomanip> using namespace std; int main(){ float x,y; cin>>x; if(x<5)y=2.5-x; else if(x>=10)y=x/2-1.5; else y=2-1.5*(x-3)*(x-3); cout<<fixed<<setprecision(3)<<y; return 0; }
1052:计算邮资
#include<iostream> using namespace std; int main(){ int n,p; char a; cin>>n>>a; p=n>1000?(8+(n-1000+499)/500*4):8; p+=(a=='y'?5:0); cout<<p; return 0; }
1053:最大数输出
#include<iostream> using namespace std; int main(){ int a,b,c,maxn; cin>>a>>b>>c; maxn=a; if(maxn<b)maxn=b; if(maxn<c)maxn=c; cout<<maxn; return 0; }
1054:三角形判断
#include<iostream> using namespace std; int main(){ int a,b,c; cin>>a>>b>>c; if(a+b>c&&a+c>b&&b+c>a)cout<<"yes"; else cout<<"no"; return 0; }
1055:判断闰年
#include<iostream> using namespace std; int main(){ int n; cin>>n; cout<<(n%100==0&&n%400!=0||n%4!=0?'N':'Y'); return 0; }
1056:点和正方形的关系
#include<iostream> using namespace std; int main(){ long long x,y; cin>>x>>y; if((-1<=x)&&(x<=1)&&(-1<=y)&&(y<=1))cout<<"yes"; else cout<<"no"; return 0; }
1057:简单计算器
#include<iostream> using namespace std; int main(){ int a,b; char c; cin>>a>>b>>c; switch(c) { case '+':cout<<a+b;break; case '-':cout<<a-b;break; case '*':cout<<a*b;break; case '/': if(b==0)cout<<"Divided by zero!"; else cout<<a/b;break; default:cout<<"Invalid operator!"; } return 0; }
1058:求一元二次方程
#include<iostream> #include<cmath> #include<iomanip> using namespace std; int main() { double a,b,c; cin>>a>>b>>c; double det; det=b*b-4*a*c; if(det<-1e-12) { cout<<"No answer!"; } else { if(fabs(det)<1e-12) { cout<<"x1=x2="<<fixed<<setprecision(5)<<-b/(2*a); } else { double x1,x2; x1=(-b+sqrt(det))/2/a; x2=(-b-sqrt(det))/2/a; if(x1<x2) { cout<<"x1="<<fixed<<setprecision(5)<<x1<<";x2="<<fixed<<setprecision(5)<<x2; } else { cout<<"x1="<<fixed<<setprecision(5)<<x2<<";x2="<<fixed<<setprecision(5)<<x1; } } } return 0; }
第四章 循环结构的程序设计
第一节 for语句
1059:求平均年龄
#include<iostream> #include<iomanip> using namespace std; int main(){ int n,b[1000],sum=0; cin>>n; for(int i=1;i<=n;i++) { cin>>b[i]; sum+=b[i]; } cout<<fixed<<setprecision(2)<<1.0*sum/n; return 0; }
1060:均值
#include<iostream> #include<iomanip> using namespace std; int main(){ int n; cin>>n; double a[1000],sum=0; for(int i=1;i<=n;i++) { cin>>a[i]; sum+=a[i]; } cout<<fixed<<setprecision(4)<<sum/n; return 0; }
1061:求整数的和与均值
#include<iostream> #include<iomanip> using namespace std; int main(){ int n,a[10001],sum=0; cin>>n; for(int i=1;i<=n;i++) { cin>>a[i]; sum+=a[i]; } cout<<sum<<' '<<fixed<<setprecision(5)<<1.0*sum/n; return 0; }
1062:最高的分数
#include<iostream> using namespace std; int main(){ int n,a[1000],maxn=-1; cin>>n; for(int i=1;i<=n;i++){ cin>>a[i]; if(a[i]>maxn)maxn=a[i]; } cout<<maxn; return 0; }
1063:最大跨度值
#include<iostream> using namespace std; int main(){ int n,a[1001],maxn=-1,minn=1001; cin>>n; for(int i=1;i<=n;i++) { cin>>a[i]; if(minn>a[i])minn=a[i]; if(maxn<a[i])maxn=a[i]; } cout<<maxn-minn; return 0; }
1064:奥运奖牌计数
#include<iostream> using namespace std; int main(){ int n,a,b,c,suma=0,sumb=0,sumc=0,sum; cin>>n; for(int i=1;i<=n;i++) { cin>>a>>b>>c; suma+=a,sumb+=b,sumc+=c; } sum=suma+sumb+sumc; cout<<suma<<' '<<sumb<<' '<<sumc<<' '<<sum; return 0; }
1065:奇数求和
#include<iostream> using namespace std; int main(){ int m,n,sum=0; cin>>m>>n; for(int i=m;i<=n;i++) if(i%2)sum+=i; cout<<sum; return 0; }
1066:满足条件的数累加
#include<iostream> using namespace std; int main(){ int m,n,sum=0; cin>>m>>n; for(int i=m;i<=n;i++) if(!(i%17))sum+=i; cout<<sum; return 0; }
1067:整数的个数
#include<iostream> using namespace std; int main(){ int n,m,sum1=0,sum5=0,sum10=0; cin>>n; for(int i=1;i<=n;i++) { cin>>m; if(m==1)sum1++; if(m==5)sum5++; if(m==10)sum10++; } cout<<sum1<<' '<<sum5<<' '<<sum10; return 0; }
1068:与指定数字相同的数的个数
#include<iostream> using namespace std; int main(){ int n,x,m,sum=0; cin>>n>>m; for(int i=1;i<=n;i++) { cin>>x; if(x==m)sum++; } cout<<sum; return 0; }
1069:乘方计算
#include<iostream> using namespace std; int main(){ int a,n,ans=1; cin>>a>>n; for(int i=1;i<=n;i++) ans*=a; cout<<ans; return 0; }
1070:人口增长
#include<iostream> #include<iomanip> using namespace std; int main(){ double a,n,ans=1; cin>>a>>n; for(int i=1;i<=n;i++) ans*=1.001; cout<<fixed<<setprecision(4)<<ans*a; return 0; }
1071:菲波那契数
#include<iostream> using namespace std; int main(){ int k,a[50]; cin>>k; a[1]=1,a[2]=1; for(int i=3;i<=k;i++) a[i]=a[i-1]+a[i-2]; cout<<a[k]; return 0; }
1072:鸡尾酒疗法
#include<iostream> #include<cmath> #include<cstdio> using namespace std; int main() { int n; double z,y,z1,y1,jd=1e-6; double new1,old; cin>>n; cin>>z>>y; old=y/z; //这个计算要放在循环外面才行 for(int i=0;i<n-1;i++) { cin>>z1>>y1; new1=y1/z1; old=y/z; //这个计算要放在循环外面才行 if(new1-old>0.05-jd) cout<<"better"<<endl; else if((old-new1)>0.05-jd) cout<<"worse"<<endl; else cout<<"same"<<endl; } return 0; }
1073:救援
#include<iostream> #include<cmath> using namespace std; int main(){ double n,a,b,c,sum=0; int s; cin>>n; for(int i=1;i<=n;i++) { cin>>a>>b>>c; sum+=sqrt(a*a+b*b)/25+1.5*c; } s=ceil(sum); cout<<s; return 0; }
1074:津津的储蓄计划
#include<iostream> using namespace std; int main(){ int a[13],b=0,sum=0,i; for(i=1;i<=12;i++)cin>>a[i]; for(i=1;i<=12;i++) { b+=300-a[i]; if(b<0)break; sum+=b/100*100; b%=100; } if(i==13)cout<<1.2*sum+b; else cout<<-i; return 0; }
1075:药房管理
#include<iostream> using namespace std; int main(){ int n,m,a,ans=0; cin>>n>>m; for(int i=1;i<=m;i++) { cin>>a; if(n>=a)n-=a; else ans++; } cout<<ans; return 0; }
1076:正常血压
#include<iostream> using namespace std; int main(){ int n,a,b,ans=0,maxn=-1; cin>>n; for(int i=1;i<=n;i++) { cin>>a>>b; if(90<=a&&a<=140&&60<=b&&b<=90){ ans++; if(ans>maxn)maxn=ans; } else ans=0; } cout<<maxn; return 0; }
1077:统计满足条件的4位数
#include<iostream> using namespace std; int main(){ int n,a,a1,a2,a3,a4,ans=0; cin>>n; for(int i=1;i<=n;i++) { cin>>a; a1=a%10; a2=a/10%10; a3=a/100%10; a4=a/1000; if(a1>a2+a3+a4)ans++; } cout<<ans; return 0; }
1078:求分数序列和
#include<iostream> #include<iomanip> using namespace std; int main(){ float n,p,q,tmp,ans=0; p=1,q=2,ans=q/p; cin>>n; for(int i=2;i<=n;i++) { tmp=q; q+=p; p=tmp; ans+=q/p; } cout<<fixed<<setprecision(4)<<ans; return 0; }
1079:计算分数加减表达式的值
#include<iostream> #include<iomanip> using namespace std; int main(){ int n; double s; cin>>n; for(int i=1;i<=n;i++) s+=(i%2?1.0/i:-1.0/i); cout<<fixed<<setprecision(4)<<s; return 0; }
1080:余数相同问题
#include<iostream> using namespace std; int main(){ int a,b,c,ans; cin>>a>>b>>c; for(int i=2;i<=a||a<=b||a<=c;i++) if(a%i==b%i&&a%i==c%i) { ans=i; break; } cout<<ans; return 0; }
1081:分苹果
#include<iostream> using namespace std; int main(){ int n; cin>>n; cout<<n*(n+1)/2; return 0; }
1082:求小数的某一位
#include<iostream> using namespace std; int main(){ int a,b,c,ans; cin>>a>>b>>c; a%=b; for(int i=1;i<=c;i++) { ans=a*10/b; a=a*10%b; } cout<<ans; return 0; }
1083:计算星期几
#include<iostream> #include<cmath> #include<cstdio> using namespace std; int main() { int a,b,xh=0,sum=1;//循环 int yx;//有效的次方 cin>>a>>b; a%=7; for(int i=1;i<=b;i++) { sum=sum*a; if((sum%7==a)&&i>1) { xh=i-1; break; } } if(xh>1) { yx=int(pow(a,b%xh))%7; } else { yx=sum%7; } switch(yx) { case 1:cout<<"Monday";break; case 2:cout<<"Tuesday";break; case 3:cout<<"Wednesday";break; case 4:cout<<"Thursday";break; case 5:cout<<"Friday";break; case 6:cout<<"Saturday";break; case 0:cout<<"Sunday";break; } return 0; }
#include<iostream> #include<iomanip> using namespace std; int main(){ int a,b,ans; cin>>a>>b; ans=a%1000; for(int i=1;i<b;i++) ans=ans*a%1000; cout<<setfill('0')<<setw(3)<<ans; return 0; }
第二节 while语句
1085:球弹跳高度的计算
#include<iostream> using namespace std; int main(){ double h0,n=10,s,h; cin>>h0; s=-h0,h=h0; for(int i=1;i<=n;i++) { s+=h*2; h/=2; } cout<<s<<' '<<h; return 0; }
1086:角谷猜想
#include<iostream> using namespace std; int main(){ int n; cin>>n; while(n!=1){ if(n%2){ cout<<n<<"*3+1="; n=n*3+1; cout<<n<<' '; } else { cout<<n<<'/'<<2<<'='; n/=2; cout<<n<<' '; } } cout<<"End"; return 0; }
1087:级数求和
#include<iostream> using namespace std; int main(){ double k,ans=0; long long n=1; cin>>k; while(ans<=k+(1e-16)) { ans+=1.0/n++; } cout<<n-1; return 0; }
1088:分离整数的各个数
#include<iostream> using namespace std; int main(){ int n; cin>>n; cout<<n%10; n/=10; while(n) { cout<<' '<<n%10; n/=10; } return 0; }
1089:数字反转
#include<iostream> using namespace std; int main(){//余数自带符号,如(-31)%10=-1 int n,ans=0; cin>>n; while(n) { ans=ans*10+n%10; n/=10; } cout<<ans; return 0; }
1090:含k个3的数
#include<iostream> using namespace std; int main(){ int n,k,ans=0; cin>>n>>k; if(n%19) cout<<"NO"; else { while(n) { if(n%10==3)ans++; n/=10; } if(ans==k)cout<<"YES"; else cout<<"NO"; } return 0; }
第三节 do-while语句
1085:球弹跳高度的计算
//1085:球弹跳高度的计算 #include<iostream> using namespace std; int main(){ double h,ans,i; cin>>h; ans=-h; i=0; do { ans+=h*2; h/=2; i++; }while(i<10); cout<<ans<<endl<<h; return 0; }
1086:角谷猜想
//1086:角谷猜想 #include<iostream> using namespace std; int main(){ int n; cin>>n; do { cout<<n; if(n%2) { cout<<"*3+1="; n=n*3+1; } else { cout<<"/2="; n/=2; } cout<<n<<endl; }while(n!=1); cout<<"End"<<endl; return 0; }
1087:级数求和
//1087:级数求和 #include<iostream> using namespace std; int main(){ double s=0; int k,n=0; cin>>k; do { n++; s+=1.0/n; }while(s-k<1e-12); cout<<n; return 0; }
1088:分离整数的各个数
//1088:分离整数的各个数 #include<iostream> using namespace std; int main(){ int n; cin>>n; do { cout<<n%10<<' '; n/=10; }while(n); return 0; }
1089:数字反转
//1089:数字反转 #include<iostream> using namespace std; int main(){ int n,ans=0,f=1; cin>>n; if(n<0)f=-1,n=-n; do { ans=ans*10+n%10; n/=10; }while(n); ans*=f; cout<<ans; return 0; }
1090:含k个3的数
//1090:含k个3的数 #include<iostream> using namespace std; int main(){ int n,k; cin>>n>>k; do { if(n%10==3)k--; n/=10; }while(n); if(k)cout<<"NO"; else cout<<"YES"; return 0; }
第四节 循环嵌套
1091:求阶乘的和
#include<iostream> using namespace std; long long a[100]; int main(){ int n; long long sum=0; cin>>n; a[0]=1; for(int i=1;i<=n;i++) { a[i]=a[i-1]*i ; sum+=a[i]; } cout<<sum; return 0; }
1092:求出e的值
#include<iostream> #include<iomanip> using namespace std; double a[1000]; int main(){ double n, sum=1; cin>>n; a[0]=1; for(int i=1;i<=n;i++) { a[i]=a[i-1]/i ; sum+=a[i]; } cout<<fixed<<setprecision(10)<<sum; return 0; }
1093:计算多项式的值
#include<iostream> #include<cmath> #include<iomanip> using namespace std; int main() { double x,b; int n; cin>>x>>n; b=(pow(x,n+1)-1)/(x-1); cout<<fixed<<setprecision(2)<<b; return 0; }
1094:与7无关的数
#include<iostream> using namespace std; bool cont(int n) { while(n) { if(n%10==7)return true; n/=10; } return false; } int main(){ int n,sum=0; cin>>n; for(int i=1;i<=n;i++) if(!cont(i)&&(i%7))sum+=i*i; cout<<sum; return 0; }
1095:数1的个数
#include<iostream> using namespace std; int num1(int n) { int sum=0; while(n) { if(n%10==1)sum++; n/=10; } return sum; } int main(){ int n,ans=0; cin>>n; for(int i=1;i<=n;i++) ans+=num1(i); cout<<ans; return 0; }
1096:数字统计
#include<iostream> using namespace std; int num2(int n) { int sum=0; while(n) { if(n%10==2)sum++; n/=10; } return sum; } int main(){ int n,m,ans=0; cin>>n>>m; for(int i=n;i<=m;i++) ans+=num2(i); cout<<ans; return 0; }
1097:画矩形
#include<iostream> using namespace std; void jx(int a,int b,char c,int d) { char e=(d==1?c:' '),f; for(int i=1;i<=a;i++) { for(int j=1;j<=b;j++) { if(i==1||i==a||j==1||j==b)f=c; else f=e; cout<<f; } cout<<endl; } } int main(){ int n,m,a; char b; cin>>n>>m>>b>>a; jx(n,m,b,a); return 0; }
1098:质因数分解
#include<iostream> using namespace std; int main() { int n; cin>>n; for(int i=2;i<=n/i;i++) if(n%i==0) cout<<n/i; return 0; }
1099:第n小的质数
#include<iostream> using namespace std; int a[10001],k=1; bool prime(int n) { for(int i=1;i<=k;i++) if(n%a[i]==0)return false; return true; } int main(){ int n; cin>>n; a[1]=2; for(int i=3;k<=n;i+=2) if(prime(i))a[++k]=i; cout<<a[n]; return 0; }
1100:金币
#include<iostream> using namespace std; int main(){ int n,i=0,sum=0,ans=0; cin>>n; while(sum<=n)sum+=++i; i--; sum-=i+1; for(int j=1;j<=i;j++) ans+=j*j; ans+=(i+1)*(n-sum); cout<<ans; return 0; }
1101:不定方程求解
#include<iostream> using namespace std; int main(){ int a,b,c,ans=0; cin>>a>>b>>c; for(int i=0;i<=c/a;i++) if((c-a*i)%b==0)ans++; cout<<ans; return 0; }
第五章 数 组
第一节 一维数组
1102:与指定数字相同的数的个数
#include<iostream> using namespace std; int main(){ int n,b,c[101],ans=0; cin>>n; for(int i=1;i<=n;i++)cin>>c[i]; cin>>b; for(int i=1;i<=n;i++) if(c[i]==b)ans++; cout<<ans; return 0; }
1103:陶陶摘苹果
#include<iostream> using namespace std; int main(){ int a[11],h,ans=0; for(int i=1;i<=10;i++)cin>>a[i]; cin>>h; for(int i=1;i<=10;i++) if(a[i]<=h+30)ans++; cout<<ans; return 0; }
1104:计算书费
#include<iostream> #include<iomanip> using namespace std; int main(){ float a[11]={0,28.9,32.7,45.6,78,35,86.2,27.8,43,56,65},sum=0; int n; for(int i=1;i<=10;i++) { cin>>n; sum+=a[i]*n; } cout<<fixed<<setprecision(1)<<sum; return 0; }
1105:数组逆序重存放
#include<iostream> using namespace std; int main(){ int n,a[101]; cin>>n; for(int i=n;i>0;i--)cin>>a[i]; for(int i=1;i<=n;i++)cout<<a[i]<<' '; return 0; }
1106:年龄与疾病
#include<iostream> #include<iomanip> using namespace std; int n,b[5],a; int main(){ cin>>n; for(int i=1;i<=n;i++) { cin>>a; if(a<=18)b[1]++; else if(a<=35)b[2]++; else if(a<=60)b[3]++; else b[4]++; } for(int i=1;i<=4;i++)cout<<fixed<<setprecision(2)<<1.0*b[i]/n*100<<'%'<<' '; return 0; }
1107:校门外的树
#include<iostream> using namespace std; int a[10001]; int main(){ int l,n,c,b,ans=0; cin>>l>>n; for(int i=1;i<=n;i++) { cin>>c>>b; for(int j=c;j<=b;j++) a[j]=1; } for(int i=0;i<=l;i++) if(a[i]==0)ans++; cout<<ans; return 0; }
1108:向量点积计算
#include<iostream> using namespace std; int main(){ int n,a[1001],b,sum=0; cin>>n; for(int i=1;i<=n;i++)cin>>a[i]; for(int i=1;i<=n;i++) { cin>>b; sum+=a[i]*b; } cout<<sum; return 0; }
1109:开关灯
#include<iostream> using namespace std; bool d[5001]; int main(){ int n,m; cin>>n>>m; for(int i=1;i<=m;i++) for(int j=i;j<=n;j++) if(j%i==0)d[j]=!d[j]; cout<<1; for(int i=2;i<=n;i++) if(d[i])cout<<','<<i; return 0; }
1110:查找特定的值
#include<iostream> using namespace std; int n,a[10001],m,i; int main(){ cin>>n; for(i=1;i<=n;i++)cin>>a[i]; cin>>m; i=1; while(a[i]!=m&&i<=n)i++; if(i==n+1)cout<<-1; else cout<<i; return 0; }
1111:不高兴的津津
#include<iostream> using namespace std; int main(){ int n,m,i,s,maxn=0,max=8; for(i=1;i<=7;i++) { cin>>n>>m; if(n+m>max)max=n+m,maxn=i; } cout<<maxn; return 0; }
1112:最大值和最小值的差
#include<iostream> using namespace std; int main(){ int n,m,max=-10001,min=10001; cin>>n; for(int i=1;i<=n;i++) { cin>>m; if(m>max)max=m; if(m<min)min=m; } cout<<max-min; return 0; }
1113:不与最大数相同的数字之和
#include<iostream> using namespace std; int main(){ int n,m,max=-1000001,k,ans=0; cin>>n; for(int i=1;i<=n;i++) { cin>>m; ans+=m; if(m>max) { k=1; max=m; } else if(m==max)k++; } ans-=max*k; cout<<ans; return 0; }
1114:白细胞计数
#include<iostream> #include<iomanip> using namespace std; double a[301],m,max1=-1,max2,min1=(1<<31)-1,min2,sum=0,aver,jd; int main(){ int n; cin>>n; for(int i=1;i<=n;i++) { cin>>m; sum+=m; if(m>max1){ max2=max1; max1=m; } else if(m>max2)max2=m; if(m<min1){ min2=min1; min1=m; } else if(m<min2)min2=m; } aver=(sum-max1-min1)/(n-2); jd=max2-aver>aver-min2?max2-aver:aver-min2; cout<<fixed<<setprecision(2)<<aver<<' '<<jd; return 0; }
1115:直方图
#include<iostream> using namespace std; int a[10002]; int main(){ int n,m,max=-1; cin>>n; for(int i=1;i<=n;i++) { cin>>m; if(max<m)max=m; a[m]++; } for(int i=0;i<=max;i++) cout<<a[i]<<endl; return 0; }
1116:最长平台
#include<iostream> using namespace std; int main(){ int n; int m,fr=-1,ln=1,mn=0; cin>>n; cin>>fr; for(int i=1;i<n;i++) { cin>>m; if(m==fr){ ln++; if(mn<ln)mn=ln; } else ln=1,fr=m; } cout<<mn; return 0; }
1117:整数去重
#include<iostream> using namespace std; int a[20001],b[20001]; int main(){ int n,m,k=0,f=0; cin>>n; for(int i=1;i<=n;i++) { cin>>m; if(!a[m])a[m]=1,b[++f]=m; } for(int i=1;i<=f;i++) if(k==0) { cout<<b[i]; k=1; } else cout<<' '<<b[i]; return 0; }
1118:铺地毯
#include<iostream> using namespace std; int a[10000][4]; int main(){ int n,x,y,ans=0; cin>>n; for(int i=1;i<=n;i++)cin>>a[i][0]>>a[i][1]>>a[i][2]>>a[i][3]; cin>>x>>y; for(int i=n;i>=1;i--) { if(a[i][0]<=x&&x<=a[i][0]+a[i][2]&&a[i][1]<=y&&y<=a[i][1]+a[i][3]) { cout<<i; ans=1; break; } } if(ans==0)cout<<-1; return 0; }
第二节 二维数组
1119:矩阵交换行
#include<iostream> using namespace std; int a[6][6]; int main(){ int n,m; for(int i=1;i<=5;i++) for(int j=1;j<=5;j++)cin>>a[i][j]; cin>>n>>m; for(int i=1;i<=5;i++)swap(a[n][i],a[m][i]); for(int i=1;i<=5;i++) { for(int j=1;j<5;j++) cout<<a[i][j]<<' '; cout<<a[i][5]<<' '; } return 0; }
1120:同行列对角线的格
#include<iostream> using namespace std; void pt(int x,int y,int z) { if(z==-1)cout<<' '; cout<<'('<<x<<','<<y<<')'; if(z==1)cout<<' '; if(z==2)cout<<' '; } int main(){ int n,i,j,f=0; cin>>n>>i>>j; for(int k=1;k<n;k++) pt(i,k,1); pt(i,n,2); for(int k=1;k<n;k++) pt(k,j,1); pt(n,j,2); for(int k=1;k<=n;k++) if(i-j+1<=k&&k<=n+i-j) if(f==0) { pt(k,k-i+j,0); f=1; } else pt(k,k-i+j,-1); cout<<' '; f=0; for(int k=n;k>0;k--) if(i+j-n<=k&&k<=i+j-1) if(f==0) { pt(k,i+j-k,0); f=1; } else pt(k,i+j-k,-1); return 0; }
//1120:同行列对角线的格 #include<cstdio> int main(){ int n,x,y; scanf("%d %d %d",&n,&x,&y); for(int i=1;i<=n;i++)printf("(%d,%d) ",x,i); printf(" "); for(int i=1;i<=n;i++)printf("(%d,%d) ",i,y); printf(" "); for(int i=1;i<=n;i++) if(y-x+i>0&&y-x+i<=n)printf("(%d,%d) ",i,y-x+i); printf(" "); for(int j=1;j<=n;j++) if(x+y-j>0&&x+y-j<=n)printf("(%d,%d) ",x+y-j,j); return 0; }
1121:计算矩阵边缘元素之和
#include<iostream> using namespace std; int main(){ int m,n,sum=0,a[101][101]; cin>>m>>n; for(int i=1;i<=m;i++) for(int j=1;j<=n;j++)cin>>a[i][j]; for(int i=1;i<=m;i++) for(int j=1;j<=n;j++) if(i==1||i==m||j==1||j==n)sum+=a[i][j]; cout<<sum; return 0; }
1122:计算鞍点
#include<iostream> using namespace std; int a[6][6],h[6],l[6]; int main(){ int mh,mn,ml,ln,f=0; for(int i=1;i<=5;i++) for(int j=1;j<=5;j++)cin>>a[i][j]; for(int i=1;i<=5;i++) { mh=-1,ml=(1<<31)-1; for(int j=1;j<=5;j++) { if(mh<a[i][j])mh=a[i][j],h[i]=j; if(ml>a[j][i])ml=a[j][i],l[i]=j; } } for(int i=1;i<=5;i++) if(l[h[i]]==i) { cout<<i<<' '<<h[i]<<' '<<a[i][h[i]]<<endl; f=1; } if(f==0)cout<<"not found"; return 0; }
1123:图像相似度
#include<iostream> #include<iomanip> using namespace std; int a[101][101],b[101][101]; int main(){ int m,n,ans=0; cin>>m>>n; for(int i=1;i<=m;i++) for(int j=1;j<=n;j++)cin>>a[i][j]; for(int i=1;i<=m;i++) for(int j=1;j<=n;j++) { cin>>b[i][j]; if(b[i][j]==a[i][j])ans++; } cout<<fixed<<setprecision(2)<<1.0*ans/m/n*100; return 0; }
1124:矩阵加法
#include<iostream> #include<iomanip> using namespace std; int a[101][101],b[101][101]; int main(){ int m,n; cin>>m>>n; for(int i=1;i<=m;i++) for(int j=1;j<=n;j++)cin>>a[i][j]; for(int i=1;i<=m;i++) for(int j=1;j<=n;j++) { cin>>b[i][j]; a[i][j]+=b[i][j]; } for(int i=1;i<=m;i++) { for(int j=1;j<=n;j++)cout<<a[i][j]<<' '; cout<<endl; } return 0; }
1125:矩阵乘法
#include<iostream> #include<iomanip> using namespace std; int a[101][101],b[101][101],c[101][101]; int main(){ int n,m,k; cin>>n>>m>>k; for(int i=1;i<=n;i++) for(int j=1;j<=m;j++)cin>>a[i][j]; for(int i=1;i<=m;i++) for(int j=1;j<=k;j++)cin>>b[i][j]; for(int i=1;i<=n;i++) for(int j=1;j<=k;j++) for(int l=1;l<=m;l++) c[i][j]+=a[i][l]*b[l][j]; for(int i=1;i<=n;i++) { for(int j=1;j<=k;j++) cout<<c[i][j]<<' '; cout<<endl; } return 0; }
1126:矩阵转置
#include<iostream> using namespace std; int a[101][101],b[101][101]; int main(){ int n,m; cin>>n>>m; for(int i=1;i<=n;i++) for(int j=1;j<=m;j++)cin>>a[i][j]; for(int i=1;i<=m;i++) for(int j=1;j<=n;j++) b[i][j]=a[j][i]; for(int i=1;i<=m;i++) { for(int j=1;j<=n;j++) cout<<b[i][j]<<' '; cout<<endl; } return 0; }
1127:图像旋转
#include<iostream> using namespace std; int a[101][101],b[101][101]; int main(){ int n,m; cin>>n>>m; for(int i=1;i<=n;i++) for(int j=1;j<=m;j++)cin>>a[i][j]; for(int i=1;i<=m;i++) for(int j=1;j<=n;j++) b[i][j]=a[n+1-j][i]; for(int i=1;i<=m;i++) { for(int j=1;j<=n;j++) cout<<b[i][j]<<' '; cout<<endl; } return 0; }
1128:图像模糊处理
#include<iostream> using namespace std; int a[101][101],b[101][101]; int main(){ int n,m; cin>>n>>m; for(int i=1;i<=n;i++) for(int j=1;j<=m;j++)cin>>a[i][j]; for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) { if(i==1||i==n||j==1||j==m) b[i][j]=a[i][j]; else b[i][j]=((a[i][j]+a[i-1][j]+a[i+1][j]+a[i][j-1]+a[i][j+1])/5.0+0.5); } for(int i=1;i<=n;i++) { for(int j=1;j<m;j++) cout<<b[i][j]<<' '; cout<<b[i][m]<<endl; } return 0; }
第三节 字符类型和字符数组
1129:统计数字字符个数
#include<iostream> #include<cstdio> #include<cstring> using namespace std; int main(){ char ch[10000]; int ans=0; gets(ch); for(int i=0;i<strlen(ch);i++) if('0'<=ch[i]&&ch[i]<='9')ans++; cout<<ans; return 0; }
1130:找第一个只出现一次的字符
#include<iostream> #include<cstdio> #include<cstring> using namespace std; int b[26]; string ch; int main(){ getline(cin,ch); for(int i=0;i<ch.size();i++) b[ch[i]]++; for(int i=0;i<ch.size();i++) if(b[ch[i]]==1) { cout<<ch[i]; return 0; } cout<<"no"; return 0; }
1131:基因相关性
#include<iostream> #include<cstring> using namespace std; int main(){ double n,m; cin>>n; string s1,s2; cin>>s1>>s2; int s=s1.size(),ans=0; for(int i=0;i<s;i++) if(s1[i]==s2[i])ans++; m=ans*1.0/s; if(m-n>1e-16)cout<<"yes"; else cout<<"no"; return 0; }
1132:石头剪子布
#include<iostream> using namespace std; int si(string s) { if(s=="Rock")return 0; if(s=="Scissors")return 1; if(s=="Paper")return 2; } int main(){ string p1,p2,re[3]={"Tie","Player2","Player1"}; int n,a,b,ans[101]; cin>>n; for(int i=1;i<=n;i++) { cin>>p1>>p2; ans[i]=(si(p1)-si(p2)+3)%3; } for(int i=1;i<=n;i++) cout<<re[ans[i]]<<endl; return 0; }
1133:输出亲朋字符串
#include<iostream> #include<cstring> #include<cstdio> using namespace std; int main(){ string s1; char s2[101]; cin>>s1; int n=s1.size(); for(int i=0;i<n-1;i++) s2[i]=s1[i]+s1[i+1]; s2[n-1]=s1[n-1]+s1[0]; s2[n]='