A题
用前几天刚学的前缀和打2的n次幂和的表(真是现学现卖哈哈哈),然后从第2个元素排着除n如果是整除,就输出;
#include<bits/stdc++.h> using namespace std; int main() { long long a[31] = {1},sum = 1;; int i; for(i = 1;i<=30;i++) { sum = sum*2; a[i] = sum+a[i-1]; } int t; cin>>t; while(t--) { long long n; cin>>n; int i; for(i = 1;i<=30;i++) { if(n%a[i]==0) {cout<<n/a[i]<<endl;break;} } } }B题
小于四直接输出和不能被四整除的直接输出NO;能被四整除的就先输出所有的偶数,然后再输出前n/2-1个奇数,在输出一个第n/2-1个奇数加上n/2-1;
#include<bits/stdc++.h> using namespace std; int main() { int t; cin>>t; while(t--) { int n; cin>>n; if(n%4!=0) cout<<"NO"<<endl; else { cout<<"YES"<<endl; int i; for(i = 2;i<=n;i+=2) { cout<<i<<" "; } for(i = 1;i<n-1;i+=2) { cout<<i<<" "; } cout<<n+(n/2-1)<<endl; // cout<<endl; } } }C题
直接输出一个b两个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<<b<<" "<<c<<" "<<c<<endl; } }D题
先用第一种方法看看能否将x变成毕m*10小的数,要注意的一点就是,如果x<=x/2+10,再用方法一就会变大
#include<bits/stdc++.h> using namespace std; int main() { int t; cin>>t; while(t--) { int x,n,m; cin>>x>>n>>m; int i; for(i = 1;i<=n&&x>0&&x>x/2+10;i++) { x = x/2+10; } if(x>m*10) cout<<"NO"<<endl; else cout<<"YES"<<endl; } }E题
奇数输出n/2;偶数输出n/2-1,注意数据大小就行
#include<bits/stdc++.h> using namespace std; int main() { int t; cin>>t; while(t--) { long long n; cin>>n; if(n%2==0) cout<<n/2-1<<endl; else cout<<n/2<<endl; } }
F题
直接输出长度为n的若干个小循环节就行。
#include<bits/stdc++.h> using namespace std; char s[28] = "0abcdefghijklmnopqrstuvwxyz"; int main() { int t; cin>>t; while(t--) { int n,a,b; cin>>n>>a>>b; int i,j; for(i = 0;i < n;i++) { printf("%c",s[i%b+1]); } cout<<endl; } }