5-22 习题训练题解
Posted kingstar1
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了5-22 习题训练题解相关的知识,希望对你有一定的参考价值。
A题,看题目的意思应该是有解的,n的范围又是1e9,所以算出从2的一次方到2的三十次方依次的和在判断哪一个合适就可以。
#include<bits/stdc++.h> using namespace std; #define LL long long int main() { LL a[100]; a[0]=1; LL num=1; for(int i=1;i<30;i++) { a[i]=a[i-1]+num*2; num=num*2; } int t; cin>>t; while(t--) { LL n; cin>>n; for(int i=1;i<30;i++) { if(n%a[i]==0) { cout<<n/a[i]<<endl; break; } } } }
B题,当n是奇数或者n/2是奇数的时候就不符合条件,不然偶数就输出2.4.6…..n,奇数就输出1.3.5…n-1+n/2。
#include<bits/stdc++.h> using namespace std; int main() { int t; cin>>t; while(t--) { int n; cin>>n; if(n%2==1||((n/2)%2==1))cout<<"NO"<<endl; else { cout<<"YES"<<endl; for(int i=1;i<=n/2;i++)cout<<i*2<<" "; for(int i=1;i<n/2;i++)cout<<i*2-1<<" "; cout<<n-1+(n/2)<<endl; } } }
C题,给出三条边的范围,让其中长的两条边相等就一定能组成三角形。
#include<bits/stdc++.h> using namespace std; int main() { int t; cin>>t; while(t--) { int a,b,c,d; cin>>a>>b>>c>>d; cout<<a<<" "<<c<<" "<<c<<endl; } }
D题,如果那个数大于20,就用第一个方案,直到数小于等于20,或者次数用完,然后将剩下的数和第二个方案的次数乘10相比较,小于就不行,大于就可以。
#include<bits/stdc++.h> using namespace std; int main() { int t; cin>>t; while(t--) { int x,n,m; cin>>x>>n>>m; while(n--) { if(x<=20)break; x=x/2+10; } if(x<=10*m)cout<<"YES"<<endl; else cout<<"NO"<<endl; } }
E题,如果n是奇数,a一直可以从1到n/2,偶数,可以从1到n/2-1,一共有(n/2)-1种情况。
#include<bits/stdc++.h> using namespace std; int main() { int t; cin>>t; while(t--) { long long n; cin>>n; cout<<(n-1)/2<<endl; } }
F题,制造一个长度为a包含b个不同字母的字符串,然后输出n/a个s如果n%a!=0在输出s前n%a个字符,就可以。
#include<bits/stdc++.h> using namespace std; int main() { int t; cin>>t; while(t--) { int n,a,b; cin>>n>>a>>b; string s; for(int i=‘a‘;i<‘a‘+b;i++) { s+=i; } int o=a-b; while(o--) { s=‘a‘+s; } int v=n/a,num=n%a; while(v--) { cout<<s; } for(int i=0;i<num;i++) { cout<<s[i]; } cout<<endl; } }
以上是关于5-22 习题训练题解的主要内容,如果未能解决你的问题,请参考以下文章