过关考模拟考题解
A签到题
要是这也不会那学习委员真没招了
1 2 3 4 5
| #include<bits/stdc++.h> using namespace std; int main(){ cout<<"Help others voluntarily but never let them know they owe you a favor."<<endl; }
|
B选择结构
按照要求逐个判断,然后取最小值就行了
1 2 3 4 5 6 7 8 9
| #include<bits/stdc++.h> using namespace std; int main(){ double x,y,n,p,ans=200; cin>>x>>y>>n>>p; if(p>=x) ans=min(ans,p-y); ans=min(ans,p/10*n); printf("%.2lf",ans); }
|
C循环
分三种情况,<10的一定成立,两三四位数自己判断就行了
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| #include<bits/stdc++.h> using namespace std; int main(){ int n,cnt=0; cin>>n; for(int i=1;i<=n;i++){ if(i<10) cnt++; else if(i<100){ if(i%10==i/10) cnt++; } else if(i<1000){ if(i%10==i/10%10&&i%10==i/100) cnt++; } else if(i%10==i/10%10&&i%10==i/100%10&&i%10==i/1000) cnt++; } cout<<cnt<<endl; }
|
为什么没人想到这题能打表呢?总共也就28个数啊
1 2 3 4 5 6 7 8 9 10 11
| #include<bits/stdc++.h> using namespace std; int main(){ int a[30]={1,2,3,4,5,6,7,8,9,11, 22,33,44,55,66,77,88,99,111, 222,333,444,555,666,777,888,999,1111,2222},n; cin>>n; for(int i=0;i<=28;i++){ if(a[i]>n) {cout<<i<<endl;break;} } }
|
D菱形
逐行输出,先上半部分,再是后半部分
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| #include<bits/stdc++.h> using namespace std; int main(){ int n; cin>>n; for(int i=0;i<=n/2;i++){ for(int j=1;j<=n/2-i;j++) cout<<"."; cout<<"#"; for(int j=1;j<=i*2-1;j++) cout<<"."; if(i!=0) cout<<"#"; for(int j=1;j<=n/2-i;j++) cout<<"."; cout<<endl; } for(int i=n/2-1;i>=0;i--){ for(int j=1;j<=n/2-i;j++) cout<<"."; cout<<"#"; for(int j=1;j<=i*2-1;j++) cout<<"."; if(i!=0) cout<<"#"; for(int j=1;j<=n/2-i;j++) cout<<"."; cout<<endl; } }
|
E金字塔
逐个循环相加就行了
1 2 3 4 5 6 7
| #include<bits/stdc++.h> using namespace std; int main(){ int n,ans=0; cin>>n; for(int i=1;i<=n;i++) ans+=i*i; cout<<ans<<endl; }
|
F假期阅读
最多k*t页,但不能超过n
1 2 3 4 5 6
| #include<bits/stdc++.h> using namespace std; int main(){ int n,k,t; cin>>n>>k>>t; cout<<min(n,k*t)<<endl; }
|
G值日
求最小公倍数
1 2 3 4 5 6 7
| #include<bits/stdc++.h> using namespace std; int main(){ int n,m,i; cin>>n>>m; for(i=n;i%m!=0;i+=n); cout<<i<<endl; }
|
H数三角形
循环i 1..n,j 1..i即可,每次判断一下是否存在整数解
1 2 3 4 5 6 7 8 9 10 11
| #include<bits/stdc++.h> using namespace std; int main(){ int n,cnt=0; cin>>n; for(int i=1;i<=n;i++){ for(int j=1;j<=i;j++){ if(i*j%2==0) cnt++; } } cout<<cnt<<endl; }
|
I幂数和
直接暴力枚举所有数,判断是否能拆就行了
遍历每种可能的情况,计算和是否为这个数就行了
至于代码中的<<是二进制内左移的意思,用来计算2的n次幂
比如1<<1是10,变成了2,同理还有右移,自己学习
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| #include<bits/stdc++.h> using namespace std; int main(){ int l,r,cnt=0; cin>>l>>r; for(int i=l;i<=r;i++){ bool f=false; for(int j=0;j<=20;j++){ for(int k=0;k<=20;k++){ if((1<<j)+(1<<k)==i) {cnt++;f=true;break;} } if(f) break; } } cout<<cnt<<endl; }
|
J质因数分解
第一空,先输出n,免得后面n的值变掉了
第二空判断是否算一个因子,当然最后一个是需要特判的
第三空,既然发现了因子,那么把n减小,变为n/i
第四空,找的不对,i自增,寻找下一个位置
第五空,输出最后一个质因数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| #include<bits/stdc++.h> using namespace std; #define ll long long int main(){ ll n,i=2; cin>>n; cout<<n<<"="; for(i=2;i<=n;){ if(n%i==0&&n/i!=1){ cout<<i<<"*"; n/=i; } else{ i++; } } cout<<i-1<<endl; }
|