P1618 三连击(升级版)附解析

题目描述
将 1, 2,…, 9共 9 个数分成三组,分别组成三个三位数,且使这三个三位数的比例是 A:B:C,试求出所有满足条件的三个三位数,若无解,输出 No!!!。

输入格式
三个数,A,B,C。

输出格式
若干行,每行 3 个数字。按照每行第一个数字升序排列。

先判断第一个数i必定在111~333,再计算i是否能被A整除,如果可以就按比例输出j、k,按位取出每一个数并判断是否全部包含123456789,这样时间复杂度就比多重循环小的多。

如果没有一组数据满足要求就需要test这个变量了,test=0,输出一组就test++,这样在结尾判断test的大小就可以决定是否输出No!!!了。

#include<stdio.h>
int main(){
	int te[9]={1,2,3,4,5,6,7,8,9},what=0,num[9];
	int judge=0,test=0,a,b,c,i,j,k,x=0,y=0;
	scanf("%d%d%d",&a,&b,&c);
	for(i=123;i<=333;i++){
		if(i%a!=0){
			continue;
		}
		what=0;
		j=i/a*b;
        k=i/a*c;
        num[0]=i/100;num[1]=i%100/10;num[2]=i%10;num[3]=j/100;num[4]=j%100/10;num[5]=j%10;num[6]=k/100;num[7]=k%100/10;num[8]=k%10;
        for(x=0;x<9;++x){
        	for(y=0;y<9;++y){
        		if(te[x]==num[y]){
        			what++;break;
				}
			}
		}
		if(what==9){
			printf("%d %d %d\n",i,j,k);
			test++;
		}
	}
	if(test==0){
		printf("No!!!\n");
	}
	return 0;
}
发布了36 篇原创文章 · 获赞 29 · 访问量 1026

猜你喜欢

转载自blog.csdn.net/bupt_sanqing/article/details/104709842