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总结
本题是运用公式来计算,需要注意总人数。