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总结

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

相关推荐
深邃-3 分钟前
【数据结构与算法】-二叉树(2):实现顺序结构二叉树(堆的实现),向上调整算法,向下调整算法,堆排序,TOP-K问题
数据结构·算法·二叉树·排序算法·堆排序··top-k
We་ct3 小时前
LeetCode 5. 最长回文子串:DP + 中心扩展
前端·javascript·算法·leetcode·typescript
王老师青少年编程7 小时前
csp信奥赛C++高频考点专项训练之贪心算法 --【哈夫曼贪心】:合并果子
c++·算法·贪心·csp·信奥赛·哈夫曼贪心·合并果子
叼烟扛炮8 小时前
C++第二讲:类和对象(上)
数据结构·c++·算法·类和对象·struct·实例化
天疆说8 小时前
【哈密顿力学】深入解读航天器交会最优控制中的Hamilton函数
人工智能·算法·机器学习
wuweijianlove8 小时前
关于算法设计中的代价函数优化与约束求解的技术7
算法
leoufung9 小时前
LeetCode 149: Max Points on a Line - 解题思路详解
算法·leetcode·职场和发展
样例过了就是过了9 小时前
LeetCode热题100 最长公共子序列
c++·算法·leetcode·动态规划
HXDGCL9 小时前
矩形环形导轨:自动化循环线的核心运动单元解析
运维·算法·自动化
谭欣辰9 小时前
C++ 排列组合完整指南
开发语言·c++·算法