刘汝佳-算法竞赛入门-排列(2-6)

用1,2,3.~9组成3个三位数abc,def,ghi,每个数字恰好使用一次,要求abc:def:ghi = 1:2:3。按照"abc def ghi"的格式输出所有解,每行一个解。

解答:1.用bool Flag[10]数组来标记数字是否出现。

           2.三个数中abc最小为 123,同时1000/3最大的组成为329,所以需要枚举123~329的所有数

          3.因为三个数九个不同的数字,所以如果abc,def,ghi存在,那么1~9都会出现,则Flag[i]中的每个元素都是true ,Flag[i]不为true,那么有数字重复,所以不成立 。

以上方法转载自https://blog.csdn.net/lecholin/article/details/69787589,其中我有所添加。

#include<stdio.h>
int main(){
	int abc,def,ghi;
	for(int abc=123;abc<=329;++abc){
		bool Flag[10] = {false};	//统计0~9是否出现  
		//标记abc中a,b,c
		Flag[abc/100] = Flag[abc/10%10] = Flag[abc%10] = true;
		def = 2 * abc;
		//标记def中d,e,f
		Flag[def/100] = Flag[def/10%10] = Flag[def%10] = true;                                                       
		//标记ghi中g,h,i 
		ghi = 3 * abc;
		Flag[ghi/100] = Flag[ghi/10%10] = Flag[ghi%10] = true;
		
		bool flag = true;
		
		//因为三个数九个不同的数字,所以如果abc,def,ghi存在,那么1~9都会出现,则Flag[i]中的每个元素都是true 
		for(int i = 1;i<=9;++i){   
			if(Flag[i] != true){  //有Flag[i]不为true,那么有数字重复,所以不成立 
				flag = false;
				break;
			}

		}
		if(flag){
				printf("%d %d %d\n",abc,def,ghi);
			}
	}
	return 0;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值