• 周日. 10 月 6th, 2024

5G编程聚合网

5G时代下一个聚合的编程学习网

热门标签

洛谷-三连击(升级版)-BOSS战-入门综合练习1

admin

11 月 28, 2021

题目描述 Description

将1,2,…,9共9个数分成三组,分别组成三个三位数,且使这三个三位数构成A:B:C的比例,试求出所有满足条件的三个三位数,若无解,输出“No!!!”。
 输入输出格式 Input/output
输入格式:
三个数,A B C。
输出格式:
若干行,每行3个数字。按照每行第一个数字升序排列。
 输入输出样例 Sample input/output
样例测试点#1
输入样例:
1 2 3
输出样例:
 

192 384 576
219 438 657
273 546 819
327 654 981

说明 description
保证A<B<C
思路:从(1~1000/c)循环,然后按比例赋值,每一位数放入一个数组的每一位,判断有多少个数字被用过了,如果有9个(也就是刚好用完),输出即可
提示:记得判断按比例赋值后是否超过了1000,超过了跳出即可
代码如下:
 1 #include<iostream>  
 2 using namespace std;  
 3 int main()  
 4 {  
 5     int a,b,c,x[9],a1,a2,a3;  
 6     int y=0,ans=0,flag[10]={0},i,j;    //用flag统计数字是否用过  
 7     cin>>a1>>a2>>a3;    //输入    
 8     for(j=1;j<=1000/a3;j++)  
 9     {  
10         y=0;  
11         for(i=0;i<9;i++)  
12             flag[i]=0;    //全归0  
13         a=a1*j;  
14         b=a2*j;    //按比例赋值  
15         c=a3*j;      
16         if(a>=1000||b>1000||c>1000)  
17             break;    //超出范围的情况  
18         /*=================================*/
19         x[0]=a/100; 
20         x[1]=(a/10)%10;
21         x[2]=a%10;  
22         x[3]=b/100;          
23         x[4]=(b/10)%10;        //把每一位数放入数组中 
24         x[5]=b%10;    
25         x[6]=c/100;
26         x[7]=(c/10)%10;
27         x[8]=c%10;  
28         /*=================================*/
29         for(i=0;i<9;i++)  
30             flag[x[i]-1]=1;    //统计用过的数(用过就变成1) 
31         for(i=0;i<9;i++)  
32             y+=flag[i];   //统计用过多少个  
33         if(y==9)    //如果y=9的话,就代表所有数都用过,输出  
34         {  
35             cout<<a<<" "<<b<<" "<<c<<endl;  
36             ans++;    //有满足的a b c,ans就不等于0  
37         }  
38     }  
39     if(!ans)   //没有满足的,输出No!!!  
40         cout<<"No!!!";  
41 }  

发表回复