Codeforces 1326A. 1326A - Bad Ugly Numbers
原题链接
简单
作者:
蓬蒿人
,
2022-03-10 12:21:21
,
所有人可见
,
阅读 271
#include<iostream>
#include<cstring>
#include<string>
#include<algorithm>
using namespace std;
// 1326A
// 题目大意
// 有t组测试数据,每组包含一个n
// 要求找出一个s满足以下条件 1.s>0 2.s是n位数
// 3.s的数位没有0 4.不能被任意一个数位整除
/*-------------------解题思路-------------*/
// 构造出来的s 末尾肯定不能是2 5结尾
// 同时 若里面有3 9 肯定不能让数位和|3
// 由此找到突破点 我构造一个3结尾 其他数字尽量不少出现 同时数位和不能|3的数就好了
// 于是想到构造2929循环3结尾 若构造过程中数位和为3了 该位变成7 继续循环的方法
// 后来看题解发现脱裤子放屁了 23333...结构就好了
int T,n;
void bian(int t,string &ans,int &sum){
sum+=t;
ans+=('0'+t);
}
int main(){
scanf ("%d",&T);
while (T--){
scanf("%d", &n);
if (n==1){
puts("-1");
continue;
}
else if (n==2){
puts("29");
continue;
}
string ans="29";
int n_sum=11;//当前数位和
for (int i=0;i<n-3;i++){
if (i%2==0){
if ((n_sum+2)%3==0){
bian(7,ans,n_sum);
}
else bian(2,ans,n_sum);
}
else {
if ((n_sum+9)%3==0){
bian(7,ans,n_sum);
}
else bian(9,ans,n_sum);
}
}
ans+='3';//结尾为3
cout<<ans<<'\n';
}
return 0;
}
/*23..循环做法
int main(){
scanf ("%d",&T);
while (T--){
scanf("%d", &n);
if (n==1){
puts("-1");
continue;
}
printf ("2");
for (int i=0;i<n-1;i++){
printf ("3");
}
puts("");
}
return 0;
}*/