3 条题解

  • 2
    @ 2022-6-18 12:22:49

    这题是一道“提交答案题”。

    题目:一个三位数,各位数字互不相同,十位数字比个位、百位数字之和还要大,且十位、百位数字之和不是质数。编程找出所有符合条件的三位数。

    思路: 这一题题目说明是一个“三位数”,则我们可以用枚举的方法,分别枚举百位、十位、个位。 但是要注意题目给出的规则“各位数字互不相同,十位数字比个位、百位数字之和还要大,且十位、百位数字之和不是质数”。

    代码:

    #include <bits/stdc++.h>
    using namespace std;
    bool ss(int n)//判断素数的函数 
    {
    	if(n<2)return false;
    	if(n==2)return true;//特判 
    	for(int i=2; i<=sqrt(n); i++)  
    		if(n%i==0)
    	  		return false;
    	return true;
    }
    signed main() {
    	int sum=0;//计数器 
    	for(int i=1; i<=9; i++)//枚举百位,注意最高位不能为0 
    		for(int j=0; j<=9; j++)//枚举十位 
    			for(int k=0; k<=9; k++)//枚举个位 
    				if(i!=j&&i!=k&&j!=k&&i+k<j&&!ss(i+j))//判断是否合法 
    				{
    					sum++;//个数加1 
    					cout<<i<<j<<k<<' ';
    					if(sum==8) cout<<endl,sum=0;//输出八个数字后,换行 
    				}
    	return 0;
    }
    

    这道题是纯模拟,就是要细心,不要漏掉题目条件。

    PS:可以打表。

    • 0
      @ 2025-7-4 9:26:31

      模拟

      #include <bits/stdc++.h>
      using namespace std;
      int n,x,mi=INT_MAX,a[1005];
      bool prime(int x){//判断素数
      	if(x==1)return 0;
      	for(int i=2;i<=sqrt(x);i++){
      		if(x%i==0)return 0;
      	}
      	return 1;
      }
      int main() {
      	for(int i=1;i<=9;i++){
      		for(int j=0;j<=9;j++){
      			for(int k=0;k<=9;k++){
      				if(j>i+k&&!prime(i+j)&&i!=j&&j!=k&&i!=k){//枚举
      					x++;
      					a[x]=i*100+j*10+k;
      				}
      			}
      		}
      	}
      	int k=1;
      	for(int i=1;i<=x/8;i++){//输出(8个一行)
      		for(int j=1;j<=8;j++){
      			cout<<a[k]<<' ';
      			k++;
      		}
      		cout<<endl;
      	}
      	//cout<<k;
      	for(int i=k;i<=x;i++)cout<<a[i]<<' ';//剩余部分
          return 0; 
      }
      
      • 0
        @ 2022-7-25 11:27:14
        #include<bits/stdc++.h>
        using namespace std;
        long n,i,s,j,x,k;
        long pd(long n)//判素
        {
        	if(n<2)return 0;
        	for(long i=2;i<=sqrt(n);i++)if(n%i==0)return 0;
        	return 1;
        }
        int main()
        {
        	for(i=100;i<1000;i++)//简单枚举
        		if(i%10!=i/100&&i/100!=i/10%10&&i%10!=i/10%10&&pd(i/10%10+i/100)==0&&i/10%10>(i/100+i%10))
        		{
        			cout<<i<<' ';s++;
        			if(s%8==0)cout<<endl;
        		}
        	return 0;
        }
        • 1

        信息

        ID
        35
        时间
        1000ms
        内存
        256MiB
        难度
        7
        标签
        (无)
        递交数
        251
        已通过
        63
        上传者