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

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

相关推荐
txzrxz5 小时前
动态规划——背包问题
算法·动态规划
Yingye Zhu(HPXXZYY)6 小时前
洛谷 P15553 [CCPC 2025 哈尔滨站] 液压机
算法
谭欣辰6 小时前
LCS(最长公共子序列)详解
开发语言·c++·算法
m0_629494736 小时前
LeetCode 热题 100-----17.缺失的第一个正数
数据结构·算法·leetcode
Cando学算法6 小时前
鸽笼原理(抽屉原理)
c++·算法·学习方法
Tisfy6 小时前
LeetCode 0796.旋转字符串:暴力模拟
算法·leetcode·题解·模拟·字符串匹配
BlockChain8886 小时前
AI+区块链深度探索:算法与账本的共生时代
人工智能·算法·区块链
生成论实验室7 小时前
《源·觉·知·行·事·物:生成论视域下的统一认知语法》第一章 源:不可言说的生成之源
人工智能·科技·算法·生活·创业创新
2zcode7 小时前
基于低光照增强与轻量型CNN道路实时识别算法研究(UI界面+数据集+训练代码)
人工智能·算法·cnn·低光照增强·自动驾驶技术
hnjzsyjyj7 小时前
洛谷 P1443:马的遍历 ← BFS
数据结构·bfs