2025.12.28代码分析总结

1.1题目

1.2代码

复制代码
#include<stdio.h>

long long fac(int n){
 if(n<=0)return 0;
 if(n==1)return 1;
 return fac(n-1)+fac(n-2);
}

int main()
{
    int n;
    while(scanf("%d",&n)!=EOF){
       for(int i=1;i<=n;i++){
        for(int j=0;j<2*i-1;j++){
            printf("%lld ",fac(j));
        }
        printf("\n");
       }
    }
    return 0;
}

1.3解题思路

本题与找规律和递归有关。

1.首先注意题目,多组输入,那就利用while循环不断输入,直到到达终止条件。那么看着题目给的示例,可能一开始觉得没什么关联,纯计算,但是注意每行数的数量,都与所在行有关,第一行按下标来看,第一行为1,数量为1,第二行下标为2,数量为3,推出式子(2*n-1),这就确定了。之后来看用递归函数将这些位置上的数表示出来,又看数值的规律,我们注意到,从第三个数开始,该位置的数值是前两个位置上的数相加,这样就好写了。

2.根据我们确定的这些规律,在主函数前先定义一个递归函数。这个函数用于计算每个行列位置的值,注意如果这个位置是0/1,那么返回什么值,因为用前两个数相加得到值是从第三个数开始,所以前两个数的值需要确定。

3.在主函数里利用循环调用递归函数,注意输出格式,两个数之间需要空格。并且每行数计算后需要换行。

综上所有代码完成之后,检查程序是否能够运行。

1.4总结

本题实质上是在找规律,遇到这种看着是需要计算的一般都可以先找找规律。

2.1题目

2.2代码

复制代码
#include<stdio.h>

int main()
{
    int a[10];
    for(int i=0;i<10;i++){
        scanf("%d",&a[i]);
    }
    int m,n;
    scanf(" m:%d",&m);
    scanf(" n:%d",&n);
    int i=m,j=m+n-1;
    while(i<j){
            int temp=a[i];
        a[i]=a[j];
    a[j]=temp;
        i++;
        j--;
    }
    for(int i=0;i<10;i++){
        printf("%d ",a[i]);
    }
    return 0;
}

2.3解题思路

本题是数字的交换,根据题目给的位置,对数字交换后输出。

1.首先,根据题目要求,先输入十个数,不过需要利用数组将他们储存起来,以便后面的循环利用,根据题目要求我们还需要输入m,n,不过输入需要根据格式来输入,并且格式字符的输入,输入语句前面需要加上空格,这样会自动跳过空白符。根据输入的m,n值开始交换值。

2.从m开始,注意循环的条件,m开始加1,不需要一直加到m+n-1,这相当于没交换。交换之后将数组里的数输出。

综上所有代码完成之后,检查程序是否能够运行。

2.4总结

本题是依据数组下标来交换值。

3.1题目

3.2代码

复制代码
#include<stdio.h>

int main()
{
    float o,h,l,c;
    scanf("%f %f %f %f",&o,&h,&l,&c);
    if(c<o){
        printf("BW-Solid");
    }
    else if(c>o){
        printf("R-Hollow");
    }
    else {
        printf("R-Cross");
    }
    int x=(l<o&&l<c);
    int y=(h>c&&h>o);
    if(x&&y){
        printf(" with Lower Shadow and Upper Shadow");
    }
    else if(x){
        printf(" with Lower Shadow");
    }
    else if(y){
        printf(" with Upper Shadow");
    }
    return 0;
}

3.3解题思路

本题是依据题目要求输出,注意条件语句,这个题只有两种输出,只有两种条件语句。

1.根据题目要求输入四个变量,根据这四个变量来考虑输出,这里先考虑第一个输出的是什么,根据条件判断输出什么,注意语句以及条件。第二个输出:第二个输出有三种情况,为了不让代码过于繁琐,我们将条件用变量表示,这样就可以直接在条件语句里用了,根据不同的条件输出第二个。

综上所有代码完成之后,检查程序是否能够运行。

3.4总结

本题是条件语句的运用。

4.1题目

4.2代码

复制代码
#include<stdio.h>

int main()
{
    int A;
    scanf("%d",&A);
    int a[4];
    for(int i=0;i<4;i++){
        a[i]=A+i;
    }
    int count=0;
    for(int i=0;i<4;i++){
        for(int j=0;j<4;j++){
            for(int k=0;k<4;k++){
                if(i!=j&&i!=k&&j!=k){
                    int term=a[i]*100+a[j]*10+a[k];
                    printf("%d",term);
                    count++;
                    if(count%6==0)printf("\n");
                    else printf(" ");
                }
            }
        }
    }
    return 0;
}

4.3解题思路

这个题看着示例我们知道开头的那个数字(百位),有四种可能,从A开始的连续的四个数字,每一排以这四个数字开头。

1.先定义一个数组储存这四个数,因为后面也是用这四个数组成三位数,然后三层for循环来输出每一行的值,输出的三位数,每个数字不相同,并且每六个数字就需要换行,并且每个数字之间需要空格隔开。

综上所有代码完成之后,检查程序是否能够运行。

4.4总结

是简单的遍历,找到数字不相同的三位数,注意输出格式。

相关推荐
NAGNIP5 小时前
GPT-5.1 发布:更聪明,也更有温度的 AI
人工智能·算法
NAGNIP5 小时前
激活函数有什么用?有哪些常用的激活函数?
人工智能·算法
元亓亓亓5 小时前
LeetCode热题100--416. 分割等和子集--中等
算法·leetcode·职场和发展
BanyeBirth5 小时前
C++差分数组(二维)
开发语言·c++·算法
xu_yule7 小时前
算法基础(数论)—算法基本定理
c++·算法·算数基本定理
CoderCodingNo8 小时前
【GESP】C++五级真题(结构体排序考点) luogu-B3968 [GESP202403 五级] 成绩排序
开发语言·c++·算法
YGGP9 小时前
【Golang】LeetCode 32. 最长有效括号
算法·leetcode
自然常数e9 小时前
字符函数和字符串函数
c语言·算法·visual studio