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

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

相关推荐
囊中之锥.24 分钟前
机器学习算法详解:DBSCAN 聚类原理、实现流程与优缺点分析
算法·机器学习·聚类
AlenTech34 分钟前
152. 乘积最大子数组 - 力扣(LeetCode)
算法·leetcode·职场和发展
Piar1231sdafa1 小时前
基于yolo13-C3k2-RVB的洗手步骤识别与检测系统实现_1
人工智能·算法·目标跟踪
做科研的周师兄1 小时前
【MATLAB 实战】|多波段栅格数据提取部分波段均值——批量处理(NoData 修正 + 地理信息保真)_后附完整代码
前端·算法·机器学习·matlab·均值算法·分类·数据挖掘
天赐学c语言1 小时前
1.18 - 滑动窗口最大值 && 子类的指针转换为父类的指针,指针的值是否会改变
数据结构·c++·算法·leecode
甄心爱学习2 小时前
KMP算法(小白理解)
开发语言·python·算法
wen__xvn2 小时前
牛客周赛 Round 127
算法
大锦终2 小时前
dfs解决FloodFill 算法
c++·算法·深度优先
橘颂TA2 小时前
【剑斩OFFER】算法的暴力美学——LeetCode 200 题:岛屿数量
算法·leetcode·职场和发展
苦藤新鸡2 小时前
14.合并区间(1,3)(2,5)=(1,5)
c++·算法·leetcode·动态规划