P1008三连击

题目背景

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

题目描述

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

输入输出格式

输入格式:

木有输入

输出格式:

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

输入输出样例

192 384 576 * * * ... * * * (输出被和谐了)

本人的解题思路是:1到9被分为三个三位数,那么最大的数是987,最小的数是123。三个数要成1:2:3的比例,987/3=329,所以比列为1的那个数最小是123,最大为329(如果大于329的话,例如330*3=990大于最大数987)。for循环就从123到329循环,求出i,2*i,3*i,的个位、十位、百位,统计出现那些数字,出现了两次或两次以上这组数据就不满足题目要求,数字都只出现一次,就可以输出。

可以利用数组来记录数字出现的次数,比如2出现一次a[2]++,再出现一次a[2]++;判断1~9出现的次数只用判断a[1]~a[9]的值是多少就行了。

#include<stdio.h>
int a[10]={0},i=0;
void fun(int n)
{
	a[n%10]++;
	a[n/10%10]++;
	a[n/100]++;
}
void g()
{
	int i=0;
	for(i=0;i<10;i++)
	{
		a[i]=0;
	}
}
int main()
{
	int b=0;
	for(int i=123;i<=333;i++)
	{
		fun(i);
		fun(2*i);
		fun(3*i);
		for(int j=0;j<10;j++)
		{
			if(a[j]>1||a[0]!=0)
			{
				b=-1;
			}
		}
		if(b!=-1)
		{
			printf("%d %d %d\n",i,2*i,3*i);
		}
		b=0;
		g();
	}
}

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值