洛谷题目:三连击

题目背景

本题为提交答案题,您可以写程序或手算在本机上算出答案后,直接提交答案文本,也可提交答案生成程序。

题目描述

将 1,2,…,9 共 9 个数分成 3 组,分别组成 3 个三位数,且使这 3 个三位数构成 1:2:3 的比例,试求出所有满足条件的 3 个三位数。

输入格式

输出格式

若干行,每行 33 个数字。按照每行第 11 个数字升序排列。

首先看到这一题时首先应该观察到这里说是拿1~9九个数字来组成,并且要是1:2:3的比例,很容易就能想到第一个数字的百位数一定是不能超过3的,那我们就可以那这个来开刀:将第一个数字的初始值设为123,且它不能超过329(1000/3),即

for(int a=123;a<=329;a++)

然后再分别定义它的两倍和三倍

int b=2*a;
int c=3*a;

但是这样子走出来的数据的组成数字可能有重复,所以我们需要来一个数组x[10],分别把每个数字的出现次数记录下来,然后再通过代码

int pan=1;
		for(int i=1;i<=9;i++){
			if(x[i]!=1){
			pan=0;
			break;
			}
		}if(pan==0)
		continue;
		else
		printf("%d %d %d\n",a,2*a,3*a);

进行判断和输出。

所以这一题就迎刃而解啦~

代码如下:

#include<stdio.h>
int main(){
	int a;
	for(a=123;a<=329;a++){
		int b=2*a;
		int c=3*a;
		int t=a;
		int x[10]={0};
		while(b){
			x[b%10]++;
			b/=10;
		}while(t){
			x[t%10]++;
			t/=10;
		}while(c){
			x[c%10]++;
			c/=10;
		}int pan=1;
		for(int i=1;i<=9;i++){
			if(x[i]!=1){
			pan=0;
			break;
			}
		}if(pan==0)
		continue;
		else
		printf("%d %d %d\n",a,2*a,3*a);
	}return 0;
}

(当然,有数学大佬一眼就看出答案的也不是不可以直接输入)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值