P1008 [NOIP1998 普及组] 三连击
P1008 [NOIP1998 普及组] 三连击
题目描述:将 1,2,…,9 共 9个数分成 3 组,分别组成 3 个三位数,且使这 3个三位数构成 1:2:3的比例,试求出所有满足条件的 3个三位数。
这道题解法有很多种,题目说了,按照每行第一个数字升序排列,那么在循环找数的时候,就要以第一个数为主,从小往大找.接着,我们还知道三位数中123是每个数字都不重复且最小的,987是每个数字都不重复且最大的,所以,第一个数的循环范围是大于123且它的三倍小于987,即987/3≥a≥123,再把这三个数的个位十位百位都求出来,接下来从小到大排序,最后判断是否和{1,2,3,4,5,6,7,8,9}相等就行了,代码如下。
#include<iostream> #include<cstdio> using namespace std; int main() { int a,b,c; int i,j; int s[9]; for(a=123;a<=329;a++) { b=a*2; c=a*3; //让三个数成比例 s[0]=a/100;s[1]=a%100/10;s[2]=a%10;//分离每一位数,并用数组记录 s[3]=b/100;s[4]=b%100/10;s[5]=b%10; s[6]=c/100;s[7]=c%100/10;s[8]=c%10; for(i=0;i<8;i++) { for(j=i+1;j<9;j++) { if(s[i]==s[j]||s[i]==0||s[j]==0) break;//判断元素是否相等 } if(j<9) break; } if(i==8&&j==9) cout<<a<<" "<<b<<" "<<c<<" "<<endl; } return 0; }