当前位置: 代码迷 >> 综合 >> P1018 三连击(升级版)
  详细解决方案

P1018 三连击(升级版)

热度:11   发布时间:2023-12-13 23:40:56.0

思路: 枚举  符合条件则输出;

#include<stdio.h>
#include<math.h>
#include<string.h>
int main()
{int a,b,c,x,y,z,t,flag,p,w[10],flagz=0;  //检查有无scanf("%d %d %d",&a,&b,&c);for(int i=1; i<10; i++){for(int j=1; j<10; j++){if(j==i) j++;for(int k=1; k<10; k++)       //三重循环表示x{memset(w, 0, sizeof(w));  //清空数组(不能放在此重循环最后,会被break忽略)while(k==i||k==j) k++;   //去重x=i*100+j*10+k;y=x*b/a;  z=x*c/a;                 //用比例关系表示y,zif(z>999||k>9) break;//printf("%d %d %d\n",x,y,z);    flag=1;w[i]++;w[j]++;w[k]++;      //用桶表示数的有无//printf("%d %d %d\n",i,j,k);p=y;//printf("p%d",p);while(p>0) {t=p%10;w[t]++;//printf("%d\n",t);   //分解各位if(w[t]>1||t==0) {flag=0; break;}p/=10;}p=z;while(p>0) {t=p%10;w[t]++;//printf("%d\n",t);if(w[t]>1||t==0) {flag=0; break;}	p/=10;}if(flag) {printf("%d %d %d\n",x,y,z);	flagz=1; }}}}if(flagz==0) printf("No!!!\n");return 0;
}