2025.12.26代码分析

1.1题目

1.2代码

复制代码
#include<stdio.h>

int main()
{
    int HH,MM,X;
    scanf("%d:%d %d",&HH,&MM,&X);
    int i=1;
   while(X>0){
       if(X/10==0){
           MM=MM+X;
           X=0;
       }
       else{
        MM=MM+10;
       X=X-10;
           }
       if(MM>=60){
           HH++;
           MM=MM-60;
       }
       if(HH>=24){
           HH=HH-24;
       }
       printf("%d %02d:%02d\n",i,HH,MM);
       i++;
   }
    return 0;
}

1.3解题思路

本题是很简单的与时间相关的输入输出。

1.首先确定现在的时间和任务总时长,根据这三个变量来计算,注意以分钟来计算,每次加取10分钟,直到剩余不足十分钟。输出语句里面还要带上序号,那就定义一个序号变量,每次循环加1就好。

2.循环开始,循环条件是任务时长还大于0,那么看每次分钟要加多少,这个由X决定,因为每次是10分钟的加,如果X小于10那就需加X本身,所以还要判断每次分钟是加多少(10/X),我这里是分类讨论,其实还可以用一个变量代表每次加什么(a=(10>=X)?10:X),然后计算要表达的小时和分钟,因为分钟可能大于60,小时可能大于24,这就需要计算。

3.注意输出的格式,先序号,然后空格,之后小时和分钟,不过小时和分钟都是需要两位数,不足两位数用0补,每次输出都需要换行。

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

1.4总结

本题是简单的时钟问题,主要是注意分钟那里的加法运算和输出语句的格式。

2.1题目

2.2代码

复制代码
#include<stdio.h>
#include<string.h>
int main()
{
    char a[30];
    scanf("%s",a);
    int len=strlen(a);
    for(int i=0;i<len;i++){
      if(s[i]='0')a[i]='1';
        else if(a[i]='1')a[i]='0';
    }
    int sum=0;
    for(int i=0;i<len;i++){
        sum=sum*2;
        if(a[i]=='1')sum++;
    }
    printf("%d",sum);
}

2.3解题思路

本题是二进制转化为十进制的计算,有多种方法。

1.根据题目,我们先输入一串数字字符串,然后题目说计算机的原因,这个字符串原本的'1'是'0',原本的'0'是'1',那么我们先要将字符串转换一下,将'0','1'转变一下,得到新的字符串。

2.这里将二进制转化成十进制用的是从左往右累乘法,这是一种比较高效的方法,从最高位开始累乘,然后还有一种传统幂次法。

累乘法:

复制代码
#include<stdio.h>
#include<string.h>
int main()
{
    char a[10];
    scanf("%s",a);
    int len=strlen(a);
    int sum=0;
    for(int i=0;i<len;i++){
        sum=sum*2;
        if(a[i]=='1')sum++;
    }
    printf("%d",sum);
    return 0;
}

幂次法:

复制代码
#include<stdio.h>
#include<string.h>
int main()
{
    char a[10];
    scanf("%s",a);
    int len=strlen(a);
    int sum=0;
    int power=1;
    for(int i=len-1;i>=0;i--){
        if(a[i]=='1')sum+=power;
        power*=2;
    }
    printf("%d",sum);
    return 0;
}

可以选择不用的方法去计算。

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

2.4总结

本题是考察二进制的运算,可以多学点方法。

3.1题目

3.2代码

复制代码
#include<stdio.h>

int main()
{
    int t;
    scanf("%d",&t);
    int a[t];
    for(int i=0;i<t;i++){
        scanf("%d",&a[i]);
    }
    long long d[21];
    d[0]=1;
    d[1]=0;
    for(int i=2;i<21;i++){
         d[i]=(i-1)*(d[i-1]+d[i-2]);
    }
    for(int i=0;i<t;i++){
        printf("%lld\n",d[a[i]+1]);
    }
    return 0;
}

3.3解题思路

本题是需要我们算出笔友之间的寄信方式。

1.首先确定测试组数,然后根据这个组数定下数组,输入每组的数值。

2.根据题目对笔友的范围,小璐最多有19个笔友,但是算寄信方式小璐自己也在内,所以加上小璐,一共20个笔友,那么依次计算。先考虑特殊情况,一个人都没有只有1种方式,只有1个人没有方式寄信。然后从2开始,计算到最大笔友数,这个计算是有公式的,也可以去了解公式的推导。然后确定笔友可能数的寄信方式数之后来确定每组测试数据的方式,注意这里输入的值是小璐笔友的数量,但是我们计算的时候也要加上小璐,所以总值加1,计算出一个输出一个,不过需要换行。

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

3.4总结

本题是运用公式来计算,需要注意总人数。

相关推荐
大罗辑2 小时前
2026软考备考刷题:软件设计师经典100题(5)含详细解析
算法·软考·软件设计师·2026软考·软设备考
咕噜企业分发小米2 小时前
阿里云Milvus支持哪些向量检索算法?
算法·机器学习·milvus
蒙奇D索大2 小时前
【数据结构】排序算法精讲|折半插入排序全解:高效优化、性能对比、实战剖析
数据结构·学习·考研·算法·排序算法·改行学it
汽车仪器仪表相关领域2 小时前
ZDT-III 通用电机测试系统
数据库·算法·单元测试·压力测试·可用性测试
前端小白在前进2 小时前
力扣刷题:矩阵重叠
算法·leetcode·矩阵
啊阿狸不会拉杆2 小时前
《数字图像处理》-实验1
图像处理·人工智能·算法·计算机视觉·数字图像处理
聆风吟º2 小时前
【数据结构手札】顺序表实战指南(四):头插 | 头删
数据结构·顺序表·头插·头删
zore_c2 小时前
【C语言】排序算法——快速排序详解(含多种变式)!!!
c语言·数据结构·笔记·算法·排序算法·深度优先·推荐算法