题目描述
将1,2,…,9共9个数分成三组,分别组成三个三位数,且使这三个三位数构成1:2:3的比例,试求出所有满足条件的三个三位数。
例如:三个三位数192,384,576满足以上条件。
输出
输出所有符合要求的三个三位数,每一组占一行,数字之间由一个空格分隔。
每组中的三个数字按照从小到大输出,各组之间按照每组的第一个数从小到大输出。
AC代码:
1 #include<bits/stdc++.h> 2 using namespace std; 3 4 int main() 5 { 6 int a,b,c; 7 int p[10]; 8 for(a=123;3*a<=987;a++) 9 { 10 memset(p,0,sizeof(p)); 11 12 p[a%10]=1; 13 p[a/100]=1; 14 p[(a/10)%10]=1; 15 16 b=2*a; 17 p[b%10]=1; 18 p[b/100]=1; 19 p[(b/10)%10]=1; 20 21 c=3*a; 22 p[c%10]=1; 23 p[c/100]=1; 24 p[(c/10)%10]=1; 25 26 int s=0; 27 for(int i=1;i<=9;i++) 28 s+=p[i]; 29 if(s==9) 30 cout<<a<<" "<<2*a<<" "<<3*a<<endl; 31 } 32 return 0; 33 }
思路:
用每个数字的出现次数(也不能说是次数,就是保证(重复)出现的所有元素数值都是1)作为元素组成数组,最后每个都出现一次(和为9),说明每个数字都用了且用了一次。
每跑一个数,都用memset归零。memset(数组名,设置数值,sizeof(数组名)); 都用sizeof哈,那个不是字节长度。
memset(p,0,sizeof(p));