随缘学习记录PTA作业的自我思考

这篇博客涵盖了C++编程的多个知识点,包括矩阵中最大值的位置查找、数组排序、三数之最大值、时间进制转换、完数输出、逻辑推理和质因数分解等算法实现。示例代码详细展示了各种操作的实现过程,有助于理解C++编程技巧。
摘要由CSDN通过智能技术生成

查找出最大数值是在几行几列

#include <stdio.h>
int main()
{
    int row,cloum,max;//row是第几行(从0记起)cloum是第几列(从0记起),max是最大数值
    int a[3][4]={{1,2,3,4},{9,8,7,6},{10,-10,5,7}};//赋予初值
    max = a[0][0];
    for (int i = 0; i <=2 ; i++) {//行
        for (int j = 0; j <=3 ; j++) {//列
            if (a[i][j] > max){//判断
                max = a[i][j];
                row = i+1;
                cloum = j+1;
            }
            printf("%d\t",a[i][j]);
        }
        printf("\n");
    }
    printf("max:%d\nrow:%d\ncolum: %d",max,row,cloum);

    return 0;
}

将a[n]进行排序

#include <stdio.h>
int main()
{
    int j,i,k;//j,i单独,k是替代
    int a[10]={4654,987,654,23,654,56487,98,61,654,654};//赋予初值(也可以用scanf输入)
    for (int i = 0; i <=9 ; i++) {//9次排序排为正确的顺序
        for (int j = 0; j <=9 ; j++) {//一次排序
            if (a[j]<a[j+1]){//进行换位
                k=a[j];
                a[j]=a[j+1];
                a[j+1]=k;
            }
        }
    }
    printf("number:");
    for (int i = 0; i <=9 ; i++) {//依次输出a[10]的值
        printf("%d\t",a[i]);
    }
    return 0;
}

三个数最大值

版本一

#include <stdio.h>
int main(int x,int y,int z)
{
    int max(int x,int y,int z);//自定义函数
    int a,b,c,d;
    scanf("%d%d%d",&a,&b,&c);//储存
    d=max(a,b,c);
    printf("max=%d",d);
    return 0;
}
int max(int x,int y,int z)//定义自定义函数
{
    int m;
    if (x>y&&y>z)m=x;
    if (x>z&&z>y)m=x;
    if (z>y&&y>x)m=z;
    if (z>x&&x>y)m=z;
    if (y>x&&y>z)m=y;
    if (y>z&&z>x)m=y;
    return (m);

}

版本二

作业选做题

有时候人们用四位数字表示一个时间,比如 1106 表示 11 点零 6 分。现在,你的程序要根据起始时间和流逝的时间计算出终止时间。

读入两个数字,第一个数字以这样的四位数字表示当前时间,第二个数字表示分钟数,计算当前时间经过那么多分钟后是几点,结果也表示为四位数字。当小时为个位数时,没有前导的零,例如 5 点 30 分表示为 530;0 点 30 分表示为 030。注意,第二个数字表示的分钟数可能超过 60,也可能是负数。

输入格式:

输入在一行中给出 2 个整数,分别是四位数字表示的起始时间、以及流逝的分钟数,其间以空格分隔。注意:在起始时间中,当小时为个位数时,没有前导的零,即 5 点 30 分表示为 530;0 点 30 分表示为 030。流逝的分钟数可能超过 60,也可能是负数。

输出格式:

输出四位数字表示的终止时间,当小时为个位数时,没有前导的零。题目保证起始时间和终止时间在同一天内。

输入样例:

1120 110

输出样例:

1310

鸣谢燕山大学穆运峰老师补充数据!

#include <stdio.h>
int main()
{
    int a,b,c,d,e,f;//d是a输入的分钟数,e是溢出的小时数,f是溢出后的分钟数
    scanf("%d%d",&a,&b);
    c=a/100;//分离出小时的位数;
    d=a%100;//分离出分钟数;
    if (d+b>=60){//判断是否大于60分钟  大于的情况
        e=(b+d)/60;//溢出多少小时
        f=b+d-e*60;//剩下的分钟数
        c=c+e;//总的小时数
        printf("%d%02d",c,f);
    }
    else if (b+d<=-60){//小于负60的情况
        e=(b+d)/60;//算出来是负数,少了多少小时
        f=b+d-e*60;//算出来是负数
        c=c+e-1;//最终的小时
        f=60+f;//最终的分钟数
        printf("%d%02d",c,f);
    }
    else if(b+d>-60&&b+d<0){//为负数的情况
        c=c-1;
        f=60+b+d;
        printf("%d%02d",c,f);
    }
    else{//b+d不超过60也不为负数
        printf("%d%02d",c,b+d);
    }
    return 0;
}

定义函数求两数最大值(int)

#include <stdio.h>

int max( int a, int b );//定义函数在后面就要声明函数
//求两个数的最大值(int类型)
int main() {
    int a, b;
    scanf("%d %d", &a, &b);
    printf("max = %d\n", max(a, b));
    return 0;
}
int max(int a,int b)//定义函数的函数体
{
    int z;
    if(a>b)z=a;
    else z=b;
    return (z);
}

三天打鱼两天晒网

#include <stdio.h>
int main()
{
    int i=1,j=3,d=5,a;//a是输入的值
    scanf("%d",&a);
    /*  i<=  <=j是打鱼
     * i+5与j+5
     * j< <d
     * j+5与d+5*/
    if (a>0&&a<=1000) {//判断是否是正整数
        for (;d<=1000;) {
            if (a>=i&&a<=j){//打鱼 1 2 3 天打鱼+5
                printf("Fishing in day %d",a);break;
            }
            if (a>j&&a<=d){//晒网 4 5天晒网+5
                printf("Drying in day %d",a);break;
            }
            d+=5;
            i+=5;
            j+=5;
        }
    }
    return 0;
}

用仅学的顺序结构,和出现过的最大值最小值定义函数写出排序

#include <stdio.h>
int main() {
    int max(int a,int b);
    int min(int a,int b);
    int a, b, c, d, e, f, g, h,l,j,k,m,n;//g是首位,h是第二位
    scanf("%d %d %d %d", &a, &b, &c, &d);
    e=max(a,b);//a,b最大的一个
    f=max(c,d);//c,d最大的一个
    g=max(f,e);//最大的一个
    h=min(a,b);//a,b最小的一个
    l=min(c,d);//c,d最小的一个
    j=min(l,h);//最小的一个
    k=max(l,h);//最小中最大的一个数
    if (g==f){//e小于k
        if (k>e)printf("%d %d %d %d",g,k,e,j);
        else printf("%d %d %d %d",g,e,k,j);
    }
    if (g==e){//e小于k
        if (k>f)printf("%d %d %d %d",g,k,f,j);
        else printf("%d %d %d %d",g,f,k,j);
    }
    return 0;
}
int max(int a,int b){
    int z;
    if (a>b)z=a;
    if (b>a)z=b;
    return z;
}
int min(int a, int b){
    int z;
    if (a>b)z=b;
    if (b>a)z=a;
    return z;
}
#include <stdio.h>
int main()
{
    int a,b,c,d,e,f[4];
    scanf("%d %d %d %d",&a,&b,&c,&d);
    f[0]=a;
    f[1]=b;
    f[2]=c;
    f[3]=d;
    for (int j = 0; j <=3 ; j++) {
        for (int l = 0; l <=2 ; l++) {
            if (f[l]<f[l+1])
            {
                e=f[l];
                f[l]=f[l+1];
                f[l+1]=e;
            }
        }
    }
    for (int m = 0; m <=3 ; m++) {
        printf("%d ",f[m]);
    }
    return 0;
}

猜大小

#include <stdio.h>
#include <time.h>
#include <stdlib.h>
int main()
{
    srand(time(0));
    int a,b,c=0;
    a=(int)rand()%100+1;
    printf("%d",a);
    while (c<=3)
    {
        scanf("%d",&b);
        if (b>a)printf("你猜大了\n");
        else if (b<a)printf("你猜小了\n");
        else if (b==a)
        {
            printf("恭喜猜对了\n");
            break;
        }
        c++;
        if (c==3)
        {
            printf("你已经猜过三次了\n");
            break;
        }
    }
    return 0;
}

注意

time.h中的函数

time()是取系统时间;

stdlib.h中的函数

srand()时初始化随机数

为什么这样做

rand()%100+1

确保了随机数在1~100

输入十位数和转换进制(简易表达,不能输出ABC的进制位数)

#include <stdio.h>
#include <math.h>
int main()
{
    int a,b,c,d,n,m=0;//a是输入的十位数字,b是进制转换的
    while(scanf("%d %d",&a,&b)==2)
    {
        n=0;
        m=0;
        for (int j=1;j; j++) {//进制的转换后的算法
            c=a%b;//算出低位的数字
            d=a/b;//最终判断终止条件
            a=d;//a是除下来的数
            m=c*pow(10,n)+m;
            n+=1;
            if (d==0)
            {
                printf("%d\n",m);
                break;
            }
        }
    }
    return 0;
}

进制之间的转换运算

输出各个位数优化版

#include<stdio.h>
int main()
{
    int b,d=10,c=1,n,m,e;
    scanf("%d",&b);
    e=b;
    do {//计算有几位数
        b=b/10;
        n=n+1;
    }
    while (b>0);//不满足条件就停止
    m=n;
    int a[n];
    for (int i = 0; i <=n-1; i++) {
        a[i]=e%d/c;//优化了分离出各个位数的数字
        d*=10;
        c*=10;
    }
    for (int j = 0; j <=n-1 ; j++) {
        printf("%d\n",a[j]);//这里只是
    }
    return 0;
}

其中

a[i]=e%d/c是自动化储存的实现

输入年月日,输出是这年的第几天

#include <stdio.h>
int main()
{
    int a,b,c,n=0,m;
    int d[2][12]={{1,2,3,4,5,6,7,8,9,10,11,12},{31,29,31,30,31,30,31,31,30,31,30,31}};
    int e[2][12]={{1,2,3,4,5,6,7,8,9,10,11,12},{31,29,31,30,31,30,31,31,30,31,30,31}};
    //a是输入的年,b是输入的月份,c是输入的日,n是一年中的第几天,m是一个月内取到的天
    scanf("%d %d %d",&a,&b,&c);
    if (a%4==0 &&c <=d[1][b-1]){
        if (b-1==0)printf("这个是第:%d天\n",c);
        else if (b-1!=0) {
            m=d[1][b-1]-c;
            for (int j = 0; j <= b - 1; j++) {
                n = d[1][j] + n;//累加的天数
            }
            printf("这个是第:%d天\n",n-m);
        }
    }
    else if (a%4!=0 && c>=e[1][b-1]){
        if (b-1==0)printf("这个是第:%d天\n",c);
        else if (b-1!=0) {
            m=e[1][b-1]-c;
            for (int j = 0; j <= b - 1; j++) {
                n = e[1][j] + n;//累加的天数
            }
            printf("这个是第:%d天\n",n-m);
        }
    }
    if (c>d[1][b-1]||c>e[1][b-1])printf("你确定你输入的是正确日期?");
    return 0;
}
  1. 注意润年和平年
  2. 注意输入日期是正确的日期
  3. 没了

输入的数字进行逆序

//输入逆序的另一种算法
#include <stdio.h>
int main()
{
    int a,c;
    scanf("%d",&a);//a是输入的数字
    c=0;
    do {
        c=a%10+c*10;//低位成为高位
        a=a/10;//除去低位数字(最后一位)
    } while (a!=0);//条件成立才循环(易错为a==0)
    printf("逆序是:%d",c);
    return  0;
}
/*
 * 1.需要注意的算法就在do{}while()的循环中
 * 2.与数组不同的是,只用循环
 * 3.指针也可以达到相同的效果,但是原理上也是这个算法
 * 4.如果要单独的分离出各个位数,然后排序后组成一个数,建议还是使用数组
 */

s=阶乘和的算法

#include <stdio.h>
int main()
{
    int Jie(int a);
    int s=0,n,i,d=0;
    scanf("%d",&n);
    for (i = 1; i <=n ; i++) {
        s=s+Jie(i);
    }
    printf("%d",s);
    return 0;
}
int Jie(int a){
    int z=1;
    for (int i = 1; i <=a ; i++) {
        z=z*i;
    }
    return z;
}

全数的输出

所谓完数,是指它的因子之和刚好是其本身的正整数。如6的因子是1,2,3,而1+2+3=6,所以6是完数,且是最小的完数。 现在,用户输入N,请输出N以内的所有完数。

输入格式:

一个正整数N(6<=N<=10000)。

输出格式:

输出N以内的所有完数,一个完数占一行。

输入样例1:

100

输出样例1:

6
28
#include <stdio.h>
int main(){
    int a,s,b,c;//s是要输出的完数,c是因子和
    scanf("%d",&a);
    if (a>=6&&a<=10000){
        for (int i = 6; i<=a; i++) {
            s=i;
            c=0;
            for (int j = 1; j <s ; j++) {
                if (s%j==0){
                    b=j;
                    c=c+b;
                }
            }
            if (c==s)printf("%d\n",s);
        }
    }
    return 0;
}

谁是小偷

7-7 推理-找出罪犯 (10 分)

法官审理一起盗窃案时,四名嫌疑犯的a,b,c,d的供述如下: a:罪犯在b,c,d三人之中。 b:我没有作案,是c偷的。 c:在a和d中有一个是罪犯。 d:b说的是事实。 经调查,四人中有两人说了真话,并且罪犯只有1人。请确定真正的罪犯。

输入格式:

输出格式:

The criminal is a,b,c,d之中的一个.

输入样例:

输出样例:

The criminal is a(或b,c,d,给出真正的犯罪).
#include <stdio.h>
int main(){
    int a,b,c,d;//a指向bcd,b和d都指向c,c指向ad
    //归纳 b和d时同体,不同时成立为假,同时成立也为假,b和d只能为假
    for (int a = 0; a < 2; a++) {
        for (int b = 0; b < 2; b++) {
            for (int c = 0; c < 2; c++) {
                for (int d = 0; d < 2; d++) {
                    if (a+b+c+d==1) {//逻辑判断,不是罪犯就0
                        if ((b == 1 || c == 1 || d == 1) + 2 * ((b == 0||d==0) && c == 1) + (a == 1 || d == 1) == 2) {//俩句话说的对!
                            /*b==1 和d==1时 c一定
                             * b==0和d==0时 c一定不
                             * a==1和d==1 俩只能来一个
                             * 第一种表示b和d是关联的,只有一种情况
                             * 第二种表示b和d是关联的,有俩情况
                             * 第三种表示a和d的,但是d和b是有关联的
                             * */
                            if (a){printf("The criminal is a.");break;}
                            if (b){printf("The criminal is b.");break;}
                            if (c){printf("The criminal is c.");break;}
                            if (d){printf("The criminal is d.");break;}

                        }
                    }
                }
            }
        }

    }
    return 0;
}

质因数分解

7-6 质因数分解 (15 分)

请编写程序,输入一个正整数 n(1<n<231),对其进行质因数分解,输出分解结果。

输入样例
6618848
输出样例
6618848 = 2^5 * 17 * 23^3

1

#include <stdio.h>
#include <math.h>
int main() {
    int a,n;
    scanf("%d",&a);
    if (a>1&&a<pow(2,31)){
        printf("%d = ",a);
        for (int i = 2; i <= a; i++) {
            if (a%i==0){
                printf("%d",i);
                n=0;
                while (a%i==0){
                    a/=i;
                    n+=1;
                    if (n>1&&a%i!=0)printf("^%d",n);
                }
                if (a!=1)printf(" * ");
            }
        }
    }
    return 0;

}

输出菱形

7-4 输出菱形图案 (15 分)

用户输入一个正整数N(1<=N<=10)和一个字符a,输出由a组成的菱形图案,图案共有2N-1行。

输入格式:

一个正整数N(1<=N<=10)和一个字符a,N和a之间无空格。

输出格式:

由字符a组成的菱形图案,共2N-1行。

输入样例:

3$

输出样例:

  $
 $$$
$$$$$
 $$$
  $
#include <stdio.h>
int main(){
    int N;
    char c;
    scanf("%d%c",&N,&c);
    for(int i=1;i<=N;i++){
        for(int j=1;j<=N-i;j++){
            printf(" ");
        }
        for(int k=1;k<=2*i-1;k++){
            printf("%c",c);
        }
        printf("\n");
    }
    for(int i=N-1;i>0;i--){
        for(int j=N-i;j>0;j--){
            printf(" ");
        }
        for(int k=2*i-1;k>0;k--){
            printf("%c",c);
        }
        printf("\n");
    }
}

附赠失败的错误思想和失败案例

#include <stdio.h>
#include <math.h>
int main()
{
    int n=1;//
    double pi=0.0,i=1.0,k,team;
    while (n>=0)
    {
        team=1/n;//
        k=-team;//k是改变team的符号的
        pi=pi-k;//一样的
        n=n+2;
        i=i+1;//位数的判断
        if (fabs(team)<1e-6)break;//判断条件
    }
    pi=4*pi;
    printf("number:%f\npi:%10.8f",i,pi);
    return 0;
}

真确样本

#include <stdio.h>
#include <math.h>
int main()
{
    int sign=1;//sign用于符号的改变
    double pi=0.0,n=1.0,team=1.0;
    while (fabs(team)>=1e-6)//知道team<1e-6停止
    {
        pi=pi+team;//总式子
        n=n+2;//除法中要用到的
        sign = -sign;//改变符号
        team=sign/n;//就是判别的条件
    }
    pi = 4*pi;//pi的估计值
    printf("%10.8f",pi);//8位小数的显示
    return 0;
}

自己的正确break样本

#include <stdio.h>
#include <math.h>
int main()
{
    double n;//n是第几个数
    double pi=0.0,i=1.0,k;//pi是估算值,i是控制公式的符号,k是公式
    for (n = 1.0; n >= 0;) {
        k=i/n;
        i=-i;
        pi=pi+k;
        n=n+2;
        if (fabs(k)<=1e-6)break;
    }
    pi=4*pi;
    printf("number:%f",pi);
    return 0;
}

这个输出为3.141595

自己的二度错本

#include <stdio.h>
#include <math.h>
int main()
{
    double n;//n是第几个数
    double pi=0.0,i,k;//pi是估算值,i是控制公式的符号,k是公式
    for (n = 1.0; n >= 0;) {
        k=-1/n;
        i=-k;
        k=i;
        pi=pi+k;
        n=n+2;


        if (fabs(i)<=1e-6)break;
    }
    pi=4*pi;
    printf("number:%f",pi);
    return 0;
}

这个输出为4.000000

分段函数的成功样本

#include <stdio.h>
int main()
{
    int i,j,k;//i是分段第三段的公式,k是第n-1的函数值,j是n-2的函数值
    for (int n = 1,j=1,k=1; n <= 40; n++) {
        while (n<=2){//先把前两段的输出出来
            printf("number:%d\n",i=1);
            n=n+1;
        }
        i=k+j;//公式
        j=k;//j等于n-1的函数值(相当于下一次的n-2)
        k=i;//等于n的函数值(相当于下一次的n-1)
        printf("number:%d\n",i);
    }

    return 0;
}

俩个月后的兔子总数

#include <stdio.h>
int main()
//下两个月的兔子有几只问题
{
    int i,j,k;//i是分段第三段的公式,k是第n-1的函数值,j是n-2的函数值
    for (int n = 1,j=1,k=1; n <= 40; n+=2) {
        while (n<=2){
            printf("number:%d\n",i=1);
            n=n+2;
        }
        i=k+j;//公式
        j=i;//j等于n的函数值(相当于下一次的n-2)
        k=i+k;//等于n+1的函数值(相当于下一次的n-1)
        printf("number:%d\n",i);
    }

    return 0;
}

特别好看的分布图

#include <stdio.h>
int main()
{
    int i,j,k;//i是分段第三段的公式,k是第n-1的函数值,j是n-2的函数值
    for (int n = 1,j=1,k=1; n <= 40; n++) {
        while (n<=2){//先把前两段的输出出来
            printf("number:%d\t",i=1);
            n=n+1;
        }
        i=k+j;//公式
        j=k;//j等于n-1的函数值(相当于下一次的n-2)
        k=i;//等于n的函数值(相当于下一次的n-1)
        printf("number:%d\t",i);
        if (n%4==0)printf("\n");
    }

    return 0;
}

输出效果

D:\untitled3\cmake-build-debug\untitled3.exe
number:1 number:1 number:2 number:3
number:5 number:8 number:13 number:21
number:34 number:55 number:89 number:144
number:233 number:377 number:610 number:987
number:1597 number:2584 number:4181 number:6765
number:10946 number:17711 number:28657 number:46368
number:75025 number:121393 number:196418 number:317811
number:514229 number:832040 number:1346269 number:2178309
number:3524578 number:5702887 number:9227465 number:14930352
number:24157817 number:39088169 number:63245986 number:102334155

进程已结束,退出代码0

错误的唯一循环判断

#include <stdio.h>
int main()
{
    int id[51],k[51];
    int i,j,l=1;
    for (int i = 1; i <=50 ; i++) {
        printf("ID:");
        scanf("%d",&id[i]);
        for (int j = 1; j <=50 ; j++) {
            if (k[l]==id[i]){
                printf("no!the number:%d",l);
                break;
            } else {
                k[l] = id[i];
                while (l == 50) {
                    printf("ID:%d", k[l]);
                }
            }
            l++;
        }
    }
    return 0;
}

改正

#include <stdio.h>
int main() {
    //先执行内循环,循环体系是从内到外的
    int Y = 100, x, y, z;
    for (int x = 1; x <= 100; x++) {
        for (int y = 1; y <= 100; y++) {
            for (int z = 1; z <= 100; z++) {
                if (5 * x + 3 * y + 1 / 3 * z == 100 && x + y + z == 100)printf("x=%d\ty=%d\tz=%d\n",x,y,z);//判断条件成立才输出
            }
        }

    }

    return 0;
}

求一排数的最大值减最小值

#include <stdio.h>
int main(){
    int a,b,c,d,s;//a是最大值,c是最小值,d是交换的数值,s是差
    scanf("%d",&a);//先输入
    c=a;
    if (a>=0&&a<1000) {
        while (scanf("%d ", &b) == 1) {//后输入的
            if (b>=0&&b<1000) {
                if (a <= b) {
                    d = a;
                    a = b;
                    b = d;
                }
                if (c >= b) {
                    d = c;
                    c = b;
                    b = d;
                }
            }
            else {
                c=0;
                break;
            }
        }
        s=a-c;
    } else s=0;

    printf("%d",s);
    return 0;
}

输出质因数

#include <stdio.h>
#include <math.h>
int main(){
    int a,n=0;
    scanf("%d",&a);
    if (a>1&&a<pow(2,31)) {
        if (a <= 3) {
            printf("%d = %d",a,a);
        } else {
            printf("%d = ", a);
            for (int i = 2; i <= a; i++) {
                n = 0;
                if (a % i == 0 && i != a)printf("%d", i);
                while (a % i == 0) {//判断是几次方
                    a = a / i;
                    n += 1;
                    if (n > 1 && a % i != 0) {
                        printf("^%d", n);
                        if (a !=0)printf(" * ");
                    }
                    if (n == 1 && a % i != 0) {
                        if (a != 1&&a != 2&&a != 3)printf(" * ");
                    }
                }

            }
        }
    }
    return 0;
}

会多输出一个*

#include <stdio.h>
#include <math.h>
int main()
{
    int a,b,n=0;
    scanf("%d",&a);
    /*质因数的含义
     * 比如48=24*2 就可以写为24=3*8 总的就可以写为48=2^4*3
     * */
    if (a>1&&a<pow(2,31))//判断范围
    {
        printf("%d = ",a);//格式开头的输出 数字 =
        for (int i = 2; i ; i++) {//这个是负责找出数字的
            if (a%i==0)//找到符合的数字(求余为0满足时质因数)
            {
                n=0;
                printf("%d",i);//输出想要的数字,看看使得否有几次方
                for (;a%i==0; )
                {
                    a/=i;//看看有几次方
                    n+=1;
                    if (n>1&&a%i==1)printf("^%d",n);
                }
                if (a!=1)printf(" * ");
            }
            if (a==1)break;
        }
    }
    return 0;
}

没有解决没有质因数的东西

查找范围内的素数

#include <stdio.h>
#include <math.h>
int n;
int su(int a);
int ci(int a);
int main(){
    int a,b;
    scanf("%d %d",&a,&b);
    n=b;
    printf("=%d",su(a));
    return 0;
}
int su(int a){//范围内的素数,从大到小
    int z=a;
    int s=0;
    for (int j = a; j>1 ; j--) {
        for (int i = 2;i<=j;i++) {
            if (j % i ==0 && i==j) {
                printf("%d", i);
                z = i;
                n--;
                if (z>1&&n>0)printf("+");
                if (n==0||z<=2)break;
                break;
            }
        }
        if (n==0)break;
        s+=z;
    }
    return s;
}

乱输出

for(a=t;a>1;a--){
    for(s=1,count=0;n<=a;s++){
        if(a%s==0){
            count++;
        }
    }
    if(count==2){
        printf("%d ",a);
    }
}
for(a=t;a>1;a--){
    for(s=1,count=0;s<=a;s++){
        if(a%s==0){
            count++;
        }
    }
    if(count==2){
        printf("%d ",a);
        n--;
        if (z>1&&n>0)printf("+");
        if (n==0||z<=2)break;
        break;
    }
    if (n==0)break;
    s+=z;
}
int t,b,s,c=0,z,e;
scanf("%d",&t);
for(b=t;b>1;b--){
    for(s=1,c=0;s<=b;s++){
        if(b%s==0){
            c++;
        }
    }
    if(c==2){
        printf("%d ",b);
        z=b;
        n--;
        if (z>1&&n>0)printf("+");
        if (n==0||z<=2)break;
        continue;
    }
    if (n==0)break;
    e+=z;
}

没按要求输出的

#include <stdio.h>
int n;
int su(int a);
int main(){
    int a,b;
    scanf("%d %d",&a,&b);
    n=b;
    printf("=%d",su(a));
    return 0;
}
int su(int a){//范围内的素数,从大到小
    int t,b,count=0,z,s;
    for(int j=a;j>1;j--){
        for(b=1,count=0;b<=a;b++){
            if(j%b==0){
                count++;
            }
        }
        if(count==2){
            printf("%d",j);
            z=j;
            n--;
            if (a>1&&n>=1)printf("+");
            s+=z;
        }
        if (n==0)break;
    }
    return s;
}

所以谨慎而行不要耍这些小聪明

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

艾米莉亚小汉堡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值