1 条题解

  • 0
    @ 2022-6-17 16:33:32

    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);
    }
    
    

    Pascal :

    var
      i:integer;
      s,ss:string;
      c:char;
    begin
      for i:=123 to 321 do
      begin
        str(i,ss);
        str(i*2,s); ss:=ss+s;
        str(i*3,s); ss:=ss+s;
        for c:='1' to '9' do
          if pos(c,ss)=0 then break;
        if pos(c,ss)=0 then continue;
        writeln(i,' ',i*2,' ',i*3);
      end;
    end.
    
    

    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);
    			}
    		}
    		
    	}
    }
    
    

    [NOIP1998 普及]组成三位数/三连击

    信息

    ID
    2984
    时间
    1000ms
    内存
    125MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者