1
时间换算(5分)
题目内容:
UTC是世界协调时,BJT是北京时间,UTC时间相当于BJT减去8。现在,你的程序要读入一个整数,表示BJT的时和分。整数的个位和十位表示分,百位和千位表示小时。如果小时小于10,则没有千位部分;如果小时是0,则没有百位部分;如果小时不是0而分小于10分,需要保留十位上的0;如果小时是0而分小于10分的,则不需要保留十位上的0。如1124表示11点24分,而905表示9点5分,36表示0点36分,7表示0点7分。
有效的输入范围是0到2359,即你的程序不可能从测试服务器读到0到2359以外的输入数据。
你的程序要输出这个时间对应的UTC时间,输出的格式和输入的相同,即输出一个整数,表示UTC的时和分。整数的个位和十位表示分,百位和千位表示小时。如果小时小于10,则没有千位部分;如果小时是0,则没有百位部分;如果小时不是0而分小于10分,需要保留十位上的0;如果小时是0而分小于10分的,则不需要保留十位上的0。
提醒:要小心跨日的换算。
输入格式:
一个整数,表示BJT的时和分。整数的个位和十位表示分,百位和千位表示小时。如果小时小于10,则没有千位部分;如果小时是0,则没有百位部分;如果小时不是0而分小于10分,需要保留十位上的0;如果小时是0而分小于10分的,则不需要保留十位上的0。
输出格式:
一个整数,表示UTC的时和分。整数的个位和十位表示分,百位和千位表示小时。如果小时小于10,则没有千位部分;如果小时是0,则没有百位部分;如果小时不是0而分小于10分,需要保留十位上的0;如果小时是0而分小于10分的,则不需要保留十位上的0。
输入样例:
803
输出样例:
3
#include<stdio.h>int main()
{int BJT;int UTC;printf("请输入BJT:");scanf("%d",&BJT);printf("您输入的时间为:%d\n",BJT);if (BJT>0&&BJT<2359){ //规定输入的BJT范围必须在0-2359之间 if(BJT<800){ //跨日换算 BJT += 2400 ;}UTC=BJT-800;printf("UTC=%d",UTC);}else printf("您输入的时间不符合格式,请重新输入。");return 0; }
2
分队列(5分)
题目内容:
班级第一次列队,通常老师会让同学按身高排成一列,然后1、2报数,喊到1的同学向前一 步,就这样,队伍就变成两列了。假设现在一个班级有n个同学,并且他们已经按身高排成 了一列,同学按身高从1到n编号,你能告诉我最后哪些编号的同学站在了第一列么?
输入格式:
输入一个正整数n,表示班级的人数。
输出格式:
按顺序输出所有在第一列的同学对应的编号,每两个编号之间用一个空格隔开,最后一个编号后面没有空格。
输入样例:
11
输出样例:
1 3 5 7 9 11
#include<stdio.h>int main()
{int n;int i;printf("请输入班级人数\n");scanf("%d",&n);printf("您输入的班级人数是%d\n",n);printf("站在第一列的学生的编号是:");for(i=1;i<n;i++){if(i%2!=0){printf("%d ",i); //不要忘了空格 }}if(n%2!=0){printf("%d",n); //题目要求最后一个编号后不能有空格 }printf("."); //检测最后一个编号后是否有空格 return 0;
}
1
奇偶个数(5分)
题目内容:
你的程序要读入一系列正整数数据,输入-1表示输入结束,-1本身不是输入的数据。程序输出读到的数据中的奇数和偶数的个数。
输入格式:
一系列正整数,整数的范围是(0,100000)。如果输入-1则表示输入结束。
输出格式:
两个整数,第一个整数表示读入数据中的奇数的个数,第二个整数表示读入数据中的偶数的个数。两个整数之间以空格分隔。
输入样例:
9 3 4 2 5 7 -1
输出样例:
4 2
变量:
一个存储数的number
两个计数器ocount,ecount
算法:
1.输入一个数(存到number里)判断其是否为-1
2.若不是-1,判断其是否在0-100000内,如不在弹出错误提示
4.判断number为奇数还是偶数(number%2==0则对ecount++否则对ocount++)
5.检测到-1后直接输出ecount和ocount的值
流程图
#include<stdio.h>
int main()
{int number;int ocount=0,ecount=0;printf("请输入数字,输入-1时输入结束");scanf("%d",&number);while(number!=-1){if(number>0&&number<100000){if(number%2==0){ecount++; } else ocount++;}else printf("错误,该数不在指定范围内");scanf("%d",&number); } printf("%d %d",ocount,ecount);return 0;
}
2
数字特征值(5分)
题目内容:
对数字求特征值是常用的编码算法,奇偶特征是一种简单的特征值。对于一个整数,从个位开始对每一位数字编号,个位是1号,十位是2号,以此类推。这个整数在第n位上的数字记作x,如果x和n的奇偶性相同,则记下一个1,否则记下一个0。按照整数的顺序把对应位的表示奇偶性的0和1都记录下来,就形成了一个二进制数字。比如,对于342315,这个二进制数字就是001101。
这里的计算可以用下面的表格来表示:
数字 | 3 | 4 | 2 | 3 | 1 | 5 |
数位 | 6 | 5 | 4 | 3 | 2 | 1 |
数字奇偶 | 奇 | 偶 | 偶 | 奇 | 奇 | 奇 |
数位奇偶 | 偶 | 奇 | 偶 | 奇 | 偶 | 奇 |
奇偶一致 | 0 | 0 | 1 | 1 | 0 | 1 |
二进制位值 | 32 | 16 | 8 | 4 | 2 | 1 |
你的程序要读入一个非负整数,整数的范围是[0,1000000],然后按照上述算法计算出表示奇偶性的那个二进制数字,输出它对应的十进制值。
提示:将整数从右向左分解,数位每次加1,而二进制值每次乘2。
输入格式:
一个非负整数,整数的范围是[0,1000000]。
输出格式:
一个整数,表示计算结果。
输入样例:
342315
输出样例:
13
二进制掌握的不好没能想通最后的输出值应该是怎么样的,在网上找了段正确的代码
#include <stdio.h>
int main()
{int a,b,x; //a为输入整数,x为整数右面第一位 /b为整数位数 int c,d=1; //c为二进制数,d为二进制位数 int sum; //sum为最后输出值 scanf("%d",&a);for(b=1;a!=0;b++) {x=a%10; //取整数右面第一位 a/=10; //消掉整数右面第一位 if((b+x)%2==0) //判断二进制数为 1 or 0 {c=1;}else{c=0;}sum+=c*d; //二进制数转换为十进制数 d*=2;}printf("%d",sum); return 0;
}