求数字奇偶特征值

对数字求特征值是常用的编码算法,奇偶特征是一种简单的特征值。对于一个整数,从个位开始对每一位数字编号,个位是1号,十位是2号,以此类推。这个整数在第n位上的数字记作x,如果x和n的奇偶性相同,则记下一个1,否则记下一个0。按照整数的顺序把对应位的表示奇偶性的0和1都记录下来,就形成了一个二进制数字。比如,对于342315,这个二进制数字就是001101。按照二进制位值将1的位的位值加起来就得到了结果13。

你的程序要读入一个非负整数,整数的范围是[0,100000],然后按照上述算法计算出表示奇偶性的那个二进制数字,输出它对应的十进制值。

提示:将整数从右向左分解,数位每次加1,而二进制值每次乘2。

输入格式:
一个非负整数,整数的范围是[0,100000]。
输出格式:一个整数,表示计算结果。
输入样例:342315
输出样例:13
时间限制:500ms内存限制:32000kb

/*我原来对于此题的思路是整个化为个位整数求二进制值,后来发现过于复杂。
最后是按照奇数+奇数则为偶数,奇数+偶数则为奇数的思路来解决。*/
#include<stdio.h>
int main(){
    int i=1,j=1,x,value=0;  
    scanf("%d",&x);
    while(x!=0){
        if((x+i)%2==0)
        {
            value = value + j;
        }
        i++;
        x = x/10;
        j = j*2;    
    }
    printf("%d", value);
    return 0;
}

信号报告

无线电台的RS制信号报告是由三两个部分组成的:
R(Readability) 信号可辨度即清晰度.
S(Strength) 信号强度即大小.
其中R位于报告第一位,共分5级,用1—5数字表示.
1---Unreadable
2---Barely readable, occasional words distinguishable
3---Readable with considerable difficulty
4---Readable with practically no difficulty
5---Perfectly readable
报告第二位是S,共分九个级别,用1—9中的一位数字表示
1---Faint signals, barely perceptible
2---Very weak signals
3---Weak signals
4---Fair signals
5---Fairly good signals
6---Good signals
7---Moderately strong signals
8---Strong signals
9---Extremely strong signals
现在,你的程序要读入一个信号报告的数字,然后输出对应的含义。如读到59,则输出:
Extremely strong signals, perfectly readable.
输入格式:
一个整数,信号报告。整数的十位部分表示可辨度,个位部分表示强度。输入的整数范围是[11,59],这个范围外的数字不可能出现在测试数据中。
输出格式:
一句话,表示这个信号报告的意义。按照题目中的文字,先输出表示强度的文字,跟上逗号和空格,然后是表示可辨度的文字,跟上句号。注意可辨度的句子的第一个字母是小写的。注意这里的标点符号都是英文的。
输入样例:33
输出样例: Weak signals, readable with considerable difficulty.
时间限制:500ms内存限制:32000kb

//switch()的练习
#include<stdio.h>
int main()
{
    int sign,r,s;
    scanf("%d",&sign);  
    if(11<=sign&&sign<=59){
        r = sign/10;
        s = sign - sign/10*10;

        switch ( s ){
            case 1:
                printf("Faint signals, barely perceptible, ");
                break;
            case 2:
                printf("Very weak signals, ");
                break;
            case 3:
                printf("Weak signals, ");
                break;
            case 4:
                printf("Fair signals, ");
                break;
            case 5:
                printf("Fairly good signals, ");
                break;
            case 6:
                printf("Good signals, ");
                break;
            case 7:
                printf("Moderately strong signals, ");
                break;
            case 8:
                printf("Strong signals, ");
                break;
            case 9:
                printf("Extremely strong signals, ");
                break;
            }

        switch ( r ){
            case 1:
                printf("unreadable.");
                break;
            case 2:
                printf("barely readable, occasional words distinguishable.");
                break;
            case 3:
                printf("readable with considerable difficulty.");
                break;
            case 4:
                printf("readable with practically no difficulty.");
                break;
            case 5:
                printf("perfectly readable.");
                break;
            }   
        }   
    return 0;
}

求数列中的奇偶数量

你的程序要读入一系列正整数数据,输入-1表示输入结束,-1本身不是输入的数据。程序输出读到的数据中的奇数和偶数的个数。
输入格式:一系列正整数,整数的范围是(0,100000)。如果输入-1则表示输入结束。
输出格式:两个整数,第一个整数表示读入数据中的奇数的个数,第二个整数表示读入数据中的偶数的个数。两个整数之间以空格分隔。
输入样例:9 3 4 2 5 7 -1
输出样例:4 2
时间限制:500ms内存限制:32000kb

//while()循环
//输入一个整数,判断是否大于-1、是否为偶数,然后输出
#include<stdio.h>
int main(){
    int x,i = 0, j = 0;
    scanf("%d",&x);

    while( x != -1 ){
        if (x % 2 == 0){
            i++; }
        else{
            j++; }  

        scanf("%d",&x);
        }       
    printf("%d %d", j,i);
    return 0;
}

时间换算

UTC是世界协调时,BJT是北京时间,UTC时间相当于BJT减去8。现在,你的程序要读入一个整数,表示BJT的时和分。整数的个位和十位表示分,百位和千位表示小时。如果小时小于10,则没有千位部分;如果小时是0,则没有百位部分;如果分小于10分,需要保留十位上的0。如1124表示11点24分,而905表示9点5分,36表示0点36分,7表示0点7分。
有效的输入范围是0到2359,即你的程序不可能从测试服务器读到0到2359以外的输入数据。
你的程序要输出这个时间对应的UTC时间,输出的格式和输入的相同,即输出一个整数,表示UTC的时和分。整数的个位和十位表示分,百位和千位表示小时。如果小时小于10,则没有千位部分;如果小时是0,则没有百位部分;如果分小于10分,需要保留十位上的0。
提醒:

要小心跨日的换算。

输入格式:
一个整数,表示BJT的时和分。整数的个位和十位表示分,百位和千位表示小时。如果小时小于10,则没有千位部分;如果小时是0,则没有百位部分;如果分小于10分,需要保留十位上的0。
输出格式:
一个整数,表示UTC的时和分。整数的个位和十位表示分,百位和千位表示小时。如果小时小于10,则没有千位部分;如果小时是0,则没有百位部分;如果分小于10分,需要保留十位上的0。
输入样例:903
输出样例:103
时间限制:500ms内存限制:32000kb

#include<stdio.h> 
int main(){
    int bjt,utc,hour,minute;
    scanf("%d",&bjt);
    if(0<=bjt && bjt<=2359){
        hour = bjt/100 - 8; //时间转换只需要考虑小时数
        minute = bjt - bjt/100*100 ;
//负数,则为跨天,所以需要处理一下
        if(hour>=0){
            utc = hour * 100 + minute;
            printf("%d",utc);
        }
        else{
            utc = ( hour + 24 ) * 100 + minute;
            printf("%d",utc);
        }
    }   
    return 0;
}

三位数整数逆序输出

逆序的三位数(5分)
题目内容:
程序每次读入一个正三位数,然后输出逆序的数字。注意,当输入的数字含有结尾的0时,输出不应带有前导的0。比如输入700,输出应该是7。
输入格式:每个测试是一个3位的正整数。
输出格式:输出逆序的数。
输入样例:123
输出样例:321
时间限制:500ms内存限制:32000kb

#include<stdlib.h>
#include<stdio.h>

int main()
{
    int i;
    scanf("%d", &i);
//输入一个三位正整数,然后进行余运算,求得三个整数,然后再逆序组合
    int a = i / 100;
    int b = (i - (i / 100) * 100) / 10;
    int c = (i - i/100*10) - (i - i / 100 * 10) / 10 *10;
    int j = a + 10 * b + 100 * c;

    printf("%d",j);     
    return 0;
}