2331 - 组成三位数

通过次数

0

提交次数

0

时间限制 : 1 秒 内存限制 : 125 MB

12,…,99个数分成三组,分别组成三个三位数,且使这三个三位数构成123的比例,试求出所有满足条件的三个三位数。

例如:三个三位数192,384,576满足以上条件。


题目输入

本题无输入。


题目输出

输出所有符合要求的三个三位数,每一组占一行,数字之间由一个空格分隔。

每组中的三个数字按照从小到大输出,各组之间按照每组的第一个数从小到大输出。


输入/输出样例

输入格式


                        

输出格式


                        

C语言解答

#include<stdio.h>
int ju(int a)
{
	int flag[10]={0},i;
	int b=2*a,c=3*a;
	for(i=0;i<9;i++)
	{
		int d;
		if(i<3) d=a%10,a/=10;
		else if(i<6) d=b%10,b/=10;
		else d=c%10,c/=10;
		if(++flag[d]==2) return 0;

	}
}
int main()
{
	int i;
	for(i=123;i<=987;i++)
		if(ju(i))
			printf("%d %d %d\n",i,2*i,3*i);
	return 0;
}

C++解答

#include <iostream>
#include<cstring>
using namespace std;

bool vis[10];
int num[3];
void solve(int n)
{
    if(n==3&&num[0]*2==num[1]&&num[0]*3==num[2]) cout<<num[0]<<' '<<num[1]<<' '<<num[2]<<endl;
    for(int i=1;i<=9;i++)
    {
        if(!vis[i])
        {
            vis[i]=true;
            for(int j=1;j<=9;j++)
            {
                if(!vis[j])
                 {
                     vis[j]=true;
                     for(int k=1;k<=9;k++)
                     {
                         if(!vis[k])
                         {
                             vis[k]=true;
                             num[n]=i*100+j*10+k;
                             solve(n+1);
                             vis[k]=false;
                         }
                     }
                     vis[j]=false;
                 }
            }
            vis[i]=false;
        }
    }
}
int main()
{
    memset(vis,false,sizeof(vis));
    solve(0);
}

Java解答

import java.util.Arrays;

public class Main{
	public static boolean Judge(int a,int b,int c){
		boolean flag=true;
		int nums[]=new int[9];
		nums[0]=a/100;
		nums[1]=a/10%10;
		nums[2]=a%10;
		nums[3]=b/100;
		nums[4]=b/10%10;
		nums[5]=b%10;
		nums[6]=c/100;
		nums[7]=c/10%10;
		nums[8]=c%10;
		Arrays.sort(nums);//从小到大排序
		for(int i=0;i<8;i++){
			if(nums[i]==nums[i+1]||nums[i]==0){//判断重复和0
				flag=false;
				break;//只要有重复就跳出循环
			}else{
				flag=true;
			}
		}
		return flag;
		}
	public static void main(String[]args){
		for(int i=123;i<=333;i++){//min=123;max=999
			int j=i*2;
			int k=i*3;
			if(Judge(i,j,k)){
				System.out.println(i+" "+j+" "+k);
			}
		}
		
	}
}