1. 时间换算
题目内容:
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>
#include <stdlib.h>
int main()
{
    printf("------北京时间和世界时间的换算------\n");
    int BJ;
    int world, world1;
    int h, m;
    printf("请输入北京时间:");
    scanf("%d", &BJ);
    if (BJ>=0 && BJ<=2359){
        if(BJ>800){
            world1 = BJ-800;
        }
        else {
            world1 = 800-BJ;
        }
        h = world1/100;
        m = world1%100;
        if (m>=60){
            h += 1;
            m=m-60;
            world=h*100+m;
        }
        else{
            world = world1;
        }
        printf("世界时间为:%d\n", world);
    }
    else{
        printf("请输入正确的时间:\n");
    }
    return 0;
}
 
2. 分队列
题目内容:
班级第一次列队,通常老师会让同学按身高排成一列,然后1、2报数,喊到1的同学向前一 步,就这样,队伍就变成两列了。假设现在一个班级有n个同学,并且他们已经按身高排成 了一列,同学按身高从1到n编号,你能告诉我最后哪些编号的同学站在了第一列么?
输入格式:
输入一个正整数n,表示班级的人数。
输出格式:
按顺序输出所有在第一列的同学对应的编号,每两个编号之间用一个空格隔开,最后一个编号后面没有空格。
输入样例:
11
输出样例:
1 3 5 7 9 11
#include <stdio.h>
#include <stdlib.h>
int main()
{
    printf("------------------队列--------------\n");
    int num;
    int i;
    int n;
    printf("请输入班级人数:");
    scanf("%d",&num);
    for(i=1; i <= num; ){
        n = i;
        i +=2;
        printf("%d\t",n);
    }
    return 0;
} 
3. 奇偶个数
题目内容:
你的程序要读入一系列正整数数据,输入-1表示输入结束,-1本身不是输入的数据。程序输出读到的数据中的奇数和偶数的个数。
输入格式:
一系列正整数,整数的范围是(0,100000)。如果输入-1则表示输入结束。
输出格式:
两个整数,第一个整数表示读入数据中的奇数的个数,第二个整数表示读入数据中的偶数的个数。两个整数之间以空格分隔。
输入样例:
9 3 4 2 5 7 -1
输出样例:
4 2
#include <stdio.h>
#include <stdlib.h>
int main()
{
    int num;
    int count1=0;//要赋初值
    int count2=0;
    scanf("%d", &num);
    while(num != -1)
    {
        if (num % 2 == 0)
        {
            count2++;
        }else //if (num % 2 == 1)
        {
            count1++;
        }
        scanf("%d", &num);
    }
    printf("%d %d", count1, count2);
    return 0;
} 
4. 数字特征值
题目内容:
对数字求特征值是常用的编码算法,奇偶特征是一种简单的特征值。对于一个整数,从个位开始对每一位数字编号,个位是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>
#include <stdlib.h>
#include <math.h>
int main()
{
    int num=0;//接收的十进制数
    int numcopy=0;//备份
    int num2=0;
    int sum=0;
    scanf("%d",&num);
    numcopy=num;
    //循环得到这个数是个几位数
    int length=0;
    do
    {
        num=num/10;
        length++;
    }while(num != 0);
    //真正开始
    int digit=0;
    for(int i=0;i<length;i++)
    {
        digit=numcopy%10;
        numcopy=numcopy/10;
        int m= (i+1)%2;
        int n= digit%2;
        //判断位数和该位上的数的奇偶性是否一致
        if(m==n)
        {
            num2=pow(2,i);
        }else
        {
            num2=0;
        }
        sum += num2;//求和
    }
    printf("%d",sum);
    return 0;
}
 
5. 素数和
题目内容:
我们认为2是第一个素数,3是第二个素数,5是第三个素数,依次类推。
现在,给定两个整数n和m,0<n<=m<=200,你的程序要计算第n个素数到第m个素数之间所有的素数的和,包括第n个素数和第m个素数。
输入格式:
两个整数,第一个表示n,第二个表示m。
输出格式:
一个整数,表示第n个素数到第m个素数之间所有的素数的和,包括第n个素数和第m个素数。
输入样例:
2 4
输出样例:
15
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main()
{
    //利用数组放1-200个素数,用哪个找哪个
    int length=200;
    int a[length];
    int count=0;
    int i=2;
    a[0]=0;
    while(count<=length)
    {
        int isPrime=0;//一定要在循环内初始化标志
        //以下用于判断一个数是不是素数
        for(int j=2; j<i; j++)
        {
            if(i%j==0)
            {
                isPrime=1;//说明这个数不是素数
            }
        }
        if(isPrime==0)
        {
            count++;
            a[count]=i;
        }
        i++;
    }
    //printf("%d %d %d",a[0],a[1],a[2]);
    int n, m;//输入
    int sum=0;//输出
    scanf("%d %d", &n, &m);
    for(int k=n;k<=m;k++)
    {
        sum= sum+a[k];
    }
    printf("%d",sum);
    return 0;
}
 
6. 念整数
题目内容:
你的程序要读入一个整数,范围是[-100000,100000]。然后,用汉语拼音将这个整数的每一位输出出来。
如输入1234,则输出:
yi er san si
注意,每个字的拼音之间有一个空格,但是最后的字后面没有空格。当遇到负数时,在输出的开头加上“fu”,如-2341输出为:
fu er san si yi
输入格式:
一个整数,范围是[-100000,100000]。
输出格式:
表示这个整数的每一位数字的汉语拼音,每一位数字的拼音之间以空格分隔,末尾没有空格。
输入样例:
-30
输出样例:
fu san ling
#include <stdio.h>
#include <stdlib.h>
void Read(int a)
{
    switch(a)
    {
    case 0:printf("ling");break;
    case 1:printf("yi");break;
    case 2:printf("er");break;
    case 3:printf("san");break;
    case 4:printf("si");break;
    case 5:printf("wu");break;
    case 6:printf("liu");break;
    case 7:printf("qi");break;
    case 8:printf("ba");break;
    case 9:printf("jiu");break;
    }
};
int main()
{
    int num;
    scanf("%d",&num);
    if (num<0)
    {
        printf("fu ");
        num=-num;
    }
    int numcopy=num;
    int mask=1;
    while(num>9){
        num /=10;
        mask *=10;
    }
    int digit;
    do{
         digit = numcopy/mask;
         Read(digit);
         printf(" ");
         numcopy = numcopy%mask;
         mask = mask/10;//1/10=0
    }while(mask>0);
    return 0;
}









