PTA(3)

1.实验4-2-3 验证“哥德巴赫猜想” (20 分)

数学领域著名的“哥德巴赫猜想”的大致意思是:任何一个大于2的偶数总能表示为两个素数之和。比如:24=5+19,其中5和19都是素数。本实验的任务是设计一个程序,验证20亿以内的偶数都可以分解成两个素数之和。

输入格式:

输入在一行中给出一个(2, 2 000 000 000]范围内的偶数N。

输出格式:

在一行中按照格式“N = p + q”输出N的素数分解,其中p ≤ q均为素数。又因为这样的分解不唯一(例如24还可以分解为7+17),要求必须输出所有解中p最小的解。

输入样例:

24

输出样例:

24 = 5 + 19
#include<stdio.h>
#include<math.h>
int isPrime(int n);
int main()
{
    int n,i;
    scanf("%d",&n);
    for(i = 2;i <= n/2;i++)//终值是i/2的原因:举例,34=17+17,而且质数p必须要小于q
    {
        if(isPrime(i)&&isPrime(n-i))//意思是这两个数都是素数
        {
            printf("%d = %d + %d",n,i,n-i);
            break;
        }
    }
    return 0;
}
int isPrime(int n)//建立一个求出素数的函数
{
    int div;
    for(div = 2;div <= sqrt(n);div++)
    {
       if(n%div == 0)
           return 0;//不是素数
}
return 1;
}

2.实验4-1-12 黑洞数 (20 分)

黑洞数也称为陷阱数,又称“Kaprekar问题”,是一类具有奇特转换特性的数。

任何一个各位数字不全相同的三位数,经有限次“重排求差”操作,总会得到495。最后所得的495即为三位黑洞数。所谓“重排求差”操作即组成该数的数字重排后的最大数减去重排后的最小数。(6174为四位黑洞数。)

例如,对三位数207:

  • 第1次重排求差得:720 - 27 = 693;
  • 第2次重排求差得:963 - 369 = 594;
  • 第3次重排求差得:954 - 459 = 495;

以后会停留在495这一黑洞数。如果三位数的3个数字全相同,一次转换后即为0。

任意输入一个三位数,编程给出重排求差的过程。

输入格式:

输入在一行中给出一个三位数。

输出格式:

按照以下格式输出重排求差的过程:

序号: 数字重排后的最大数 - 重排后的最小数 = 差值

序号从1开始,直到495出现在等号右边为止。

输入样例:

123

输出样例:

1: 321 - 123 = 198
2: 981 - 189 = 792
3: 972 - 279 = 693
4: 963 - 369 = 594
5: 954 - 459 = 495
#include<stdio.h>
int main()
{
    int m,a,b,c,i=1,max,min,t;
    scanf("%d",&m);
    do{ 
        c=m%10;//c代表的是个位数
        b=m/10%10;//b代表的是十位数
        a=m/100;//a代表的是百位数
        if(a<b)
        {
            t=a;
            a=b;
            b=t;
        }
        if(a<c)
        {
            t=a;
            a=c;
            c=t;
        }
        if(b<c)
        {
            t=b;
            b=c;
            c=t;
        }
        max=a*100+b*10+c;//百位>十位>个位
        min=c*100+b*10+a;//百位<十位<个位
        m=max-min;
        printf("%d: %d - %d = %d\n",i,max,min,m);
        i++;
            
        
       
    }while(m!=495);
    return 0;
}

3.实验4-2-5 水仙花数 (20 分)

水仙花数是指一个N位正整数(N≥3),它的每个位上的数字的N次幂之和等于它本身。例如:153=13+53+33。 本题要求编写程序,计算所有N位水仙花数。

输入格式:

输入在一行中给出一个正整数N(3≤N≤7)。

输出格式:

按递增顺序输出所有N位水仙花数,每个数字占一行。

输入样例:

3

153
370
371
407

输出样例:

#include<stdio.h>
#include<math.h>
int p(int x,int y);
int main()
{
    int a,b,sum=0;
    int min,max;
    int n;
    scanf("%d",&n);
    max=pow(10,n);
    min=pow(10,n-1);//确定指定位数数字的取值范围
    for(int i=min;i<max;i++)
    { 
        a=i,sum=0;
    while(a>0)
    {
        b=a%10;//依次取出个位的数
        sum+=p(b,n);//个位数的n次方,n为位数
        a/=10;
    }
        if(sum==i)//如果乘方的累加和等于当前数字
        {
            printf("%d\n",i);//这个书就是水仙花数
        }
        
        
    }
    return 0;
}
int p(int x, int y)
{
    int k;
    k=x;
    for(int i=1;i<y;i++)//说明执行(y-1)次循环
    {
        x=x*k;//实际上是x的y次方
    }
    return x;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 好的,输入一个三位整数,例如:365。 首先,我们可以使用取余运算符(%)和除法运算符(/)来分别获取该数的个位,十位和百位数字。具体的操作如下: 个位数字:该数对10取余,即 365 % 10 = 5。 十位数字:该数除以10再对10取余,即 (365 / 10) % 10 = 6。 百位数字:该数除以100再向下取整,即 floor(365 / 100) = 3。 因此,对于输入的数字365,它的个位数字是5,十位数字是6,百位数字是3。 ### 回答2: 假设输入的三位整数为n。 首先,我们可以使用取余运算符(%)获取一个整数除以10的余数,即个位数。通过计算n%10,我们可以得到个位数。 接下来,我们可以使用整除运算符(//)求整除,即去掉个位数后的整数部分。计算(n//10)%10,我们可以得到十位数。 最后,我们可以再次使用整除运算符(//)求整除,计算n//100,我们可以得到百位数。 具体步骤如下: 1. 输入任意三位整数n。 2. 计算个位数:digit个位数 = n%10。 3. 计算十位数:digit十位数 = (n//10)%10。 4. 计算百位数:digit百位数 = n//100。 5. 输出digit百位数、digit十位数和digit个位数。 以输入的整数为例,如果输入是256,按照上述步骤计算,得到: digit个位数 = 256%10 = 6。 digit十位数 = (256//10)%10 = 5。 digit百位数 = 256//100 = 2。 所以,输出结果为:百位数为2,十位数为5,个位数为6。 相应的,如果输入是-123,按照上述步骤计算,得到: digit个位数 = (-123)%10 = 7。 digit十位数 = ((-123)//10)%10 = 2。 digit百位数 = (-123)//100 = -1。 所以,输出结果为:百位数为-1,十位数为2,个位数为7。 注意,如果输入为正数,计算得到的百位数、十位数和个位数均为正数;如果输入为负数,计算得到的百位数为负数,十位数和个位数仍为正数。 ### 回答3: 假设输入的三位整数为num。 首先,我们可以使用取模运算符(%)得到个位数字,即num % 10。 然后,我们可以使用整数除法(//)和取模运算符(%)结合来获取十位和百位数字。具体步骤如下: 1. 获取十位数字: a. 首先,计算十位数字右侧的数字:(num // 10) % 10。 b. 这里,(num // 10) 可以得到去除个位数字后的剩余部分,即十位和百位数字组成的数。 c. 因为十位数字位于十进制数的第2位,所以我们需要使用% 10操作符获取十位数字。 2. 获取百位数字: a. 首先,计算百位数字右侧的数字:num // 100。 b. 这里,num // 100 可以得到去除个位和十位数字后的剩余部分,即百位数字。 c. 因为百位数字位于十进制数的第3位,所以无需再进行取模操作。 综上所述,我们可以使用内置的数值运算操作符输出给定三位整数的个位、十位和百位数字。例如: ```python num = 346 # 输入一个三位整数 个位 = num % 10 十位 = (num // 10) % 10 百位 = num // 100 print("个位数字:", 个位) print("十位数字:", 十位) print("百位数字:", 百位) ``` 输出结果为: 个位数字: 6 十位数字: 4 百位数字: 3

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值