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

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

相关推荐
youtootech19 小时前
HarmonyOS《柚兔学伴》项目实战09-待办列表 UI——List+ForEach+滑动删除
数据结构·ui·华为·list·harmonyos
:-)20 小时前
算法-归并排序
java·开发语言·数据结构·算法·排序算法
Jerry1 天前
LeetCode 101. 对称二叉树
算法
可编程芯片开发1 天前
基于MPPT最大功率跟踪的离网光伏发电系统Simulink建模与仿真
算法
AI科技星1 天前
线性算子不是空间映射函数,是全域双螺旋场之间拉伸、旋转、耦合、坍缩的跨空间标准化变换载体《全域数学vs传统数学:人类文明进阶200讲》第80讲
线性代数·算法·矩阵·数据挖掘·回归·乖乖数学·全域数学
米罗篮1 天前
矩阵快速幂 (Exponentiation By Squaring Applied To Matrices)
c++·线性代数·算法·矩阵
dream_home84071 天前
图像算法模型NPU适配与算法服务实战指南
人工智能·python·算法·npu 图像服务
大鱼>1 天前
多宠物家庭智能管理平台:云端架构与多设备协同实战
python·算法·iot·宠物
To_OC1 天前
LC 22 括号生成:刷完这道题,我终于搞懂回溯剪枝了
javascript·算法·leetcode
To_OC1 天前
LC 39 组合总和:回溯入门必刷题,我踩过的两个坑都在这了
javascript·算法·leetcode