A题
https://codeforces.com/contest/1388/problem/A
我们发现第一个nearly prime是6,第二个是10,第三个是14。所以说6+10+14=30以上的都可以满足。
但是第四个数,假设是d,不能和6,10,14重复。那怎么改呢?
15也是一个nearly prime,所以我们只要将14+1,d-1即可。
#include <bits/stdc++.h>
using namespace std;
int main()
{
int t,n;
cin>>t;
while(t--)
{
cin>>n;
if(n<6+10+14+1) cout<<"NO"<<endl;
else
{
cout<<"YES"<<endl;
int x=n-6-10-14;
if(x==6||x==10||x==14) cout<<"6 10 15"<<' '<<x-1<<endl;
else cout<<"6 10 14"<<' '<<x<<endl;
}
}
return 0;
}
B题
https://codeforces.com/contest/1388/problem/B
1.要想二进制的数尽可能大,那么最后的结果必须是由8和9组成,因为只有8和9转成二进制后是4位数(1001和1000)
2.最后的结果在二进制数最大的情况下,十进制要尽可能地小,这就意味着要先填9,填不下去了再补8,最后删去的n为都包括8的那一段
3.倒推。原先我们知道n位数,因为只由8和9组成,所以这个n位数转成二进制就会是4n位数,然后要删去n位为(4n-n),其中9的个数就是(4n-n)/n,剩下的都是8的个数
#include <bits/stdc++.h>
using namespace std;
int main()
{
int t;
cin>>t;
while(t--)
{
int n;
cin>>n;
int x=(n*4-n)/4;
for(int i=1;i<=x;i++) cout<<"9";
for(int i=1;i<=n-x;i++) cout<<"8";
cout<<endl;
continue;
}
return 0;
}
写作不易,求赞ing