初级天翼
这道题在洛谷上可以直接输出哦!题目是这么say的:
本题为提交答案题,您可以写程序或手算在本机上算出答案后,直接提交答案文本,也可提交答案生成程序。
999/3=333;
最小的三位数中三个数每两个数都不相同的是123.
最大的三位数中,小于333,三个数每两个数都不相同的是329.
循环,从123到329.
j赋值为i,j1赋值为i的两倍,j2赋值为i的三倍,这样好记一点哦!(因为是1:2:3,的关系哦!!)
for (int j=1;j<=3;j++)
{
a[j1%10]=1;
a[j2%10]=1;
a[j3%10]=1;
j1/=10;
j2/=10;
j3/=10;
}
然后定义一个变量,s,初始值为0,
从1到9(因为是九个数字,1~9),循环,
s加上a[i],(a数组每次循环都全赋值为0,可以用循环或函数(如果用函数,是:memset(a,0,sizeof(a),要加头文件:#include <cstring>)
如果s为9,则我们就很幸运了,就输出了,并换行。
100AC,不对,再评论我吧!!!
资深光能
字符串水题(至少我是用字符串做的,很短)
for(int i=123;i<=321;i++){
stringstream tmp;
tmp<<i<<i*2<<i*3;
tmp>>s;
int x=0;
for(char c='1';c<='9';c++) if(s.find(c)!=string::npos) x++;
if(x==9) cout<<i<<' '<<i*2<<' '<<i*3<<'\n';
}
王星河在2018-02-18 19:54:36追加了内容
327
初级光能
for(i=123;i<=329;i++)
{
n=0;
for(k=1;k<=9;k++)
s1[k]=0;
x=i;
y=i*2;
z=i*3;
for(j=1;j<=3;j++)
{
s1[x%10]=1;
s1[y%10]=1;
s1[z%10]=1;
x=x/10;
y=y/10;
z=z/10;
}
for(j=1;j<=9;j++)
{
n=n+s1[j];
}
if(n==9)
{
cout<<i<<" "<<i*2<<" "<<i*3<<endl;
}
}
初级守护
给个比较暴力简单的方法,只要将可能的数枚举一遍。(因为三倍限制,又不能重数字,所以是123->329)
然后将所有数位的数码分离出来,看一看是不是刚好占满9个数字,即可判断。最后输出结果。
for (i=123;i<=329;i++)
{
a[1]=i%10;
a[2]=i%100/10;
a[3]=i/100;
a[4]=2*i%10;
a[5]=2*i%100/10;
a[6]=2*i/100;
a[7]=3*i%10;
a[8]=3*i%100/10;
a[9]=3*i/100;
sort(a+1,a+10);
ans=true;
for (j=1;j<=9;j++) if (a[j]!=j) ans=false;
if (ans) cout<<i<<" "<<i*2<<" "<<i*3<<endl;
}