翁恺老师C语言入门第三周编程题之《数字特征值》

题目内容:

对数字求特征值是常用的编码算法,奇偶特征是一种简单的特征值。对于一个整数,从个位开始对每一位数字编号,个位是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

按照二进制位值将1的位的位值加起来就得到了结果13。

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

输入格式:

一个非负整数,整数的范围是[0,100000]。

输出格式:

一个整数,表示计算结果。

输入样例:

342315

输出样例:

13

本人的满分通过答案,写在此方便以后查看

#include <stdio.h>
#include <math.h>
int main(){
    int num;
    int count=0;
    int a=0;
    int dig=0;
    scanf("%d",&num);
    do{
        count ++;
        a=num%10;
        if((a+count)%2==0){
            dig=dig+pow(2,count-1);
        }
        num /=10;
    }while(num>0);
    printf("%d",dig);
    return 0;
}

PS:数字奇偶和数位奇偶比较异同,等价于求两数之和是否为偶数。

这是我独自误打误撞想到的,以为别人都是这么想,后来翻看讨论区,发现不少人是先两个数都单一判断,最后再来个综合判断,那样挺麻烦的。而且网友ikeltis早于我想到此思路,发到谈论区还受到了翁老师的微博表扬,想到自己也是独立思考想到的此法子,莫名的感到了一些鼓舞,哈哈,留此文纪念下。

附上网友ikeltis的代码(未征得同意,见谅)/*
 *思路:数字奇偶和数位奇偶相同时记为1,等价于数字与数位之和为偶数时记为1
 *不知道 C 语言的指数怎么求,就用 h 做了累乘
 */

#include<stdio.h>

int main()
{
    int n=1;
    int h=1;
    int num;
    int flag=0;
    scanf("%d",&num);

    while(num != 0)
    {
        if((num+n)%2==0)
        {
            flag = flag + h;
        }
        n++;
        num = num / 10;//删去最后一位数
        h=h*2;
    }
    printf("%d\n",flag);
    return 0;
}
时间: 2024-10-10 22:02:38

翁恺老师C语言入门第三周编程题之《数字特征值》的相关文章

c语言程序设计第3周编程作业(数字特征)

题目内容: 对数字求特征值是常用的编码算法,奇偶特征是一种简单的特征值.对于一个整数,从个位开始对每一位数字编号,个位是1号,十位是2号,以此类推.这个整数在第n位上的数字记作x,如果x和n的奇偶性相同,则记下一个1,否则记下一个0.按照整数的顺序把对应位的表示奇偶性的0和1都记录下来,就形成了一个二进制数字.比如,对于342315,这个二进制数字就是001101. 这里的计算可以用下面的表格来表示: 数字 3 4 2 3 1 5 数位 6 5 4 3 2 1 数字奇偶 奇 偶 偶 奇 奇 奇

C语言程序设计_zju——第4周编程练习2_数字特征值

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 数字奇偶

素数和 翁恺老师C语言程序设计CAP第5章编程题

题目内容: 我们认为2是第一个素数,3是第二个素数,5是第三个素数,依次类推. 现在,给定两个整数n和m,0<n<=m<=200,你的程序要计算第n个素数到第m个素数之间所有的素数的和,包括第n个素数和第m个素数. 注意:是第n个素数到第m个素数,不是n和m之间的素数! 输入格式: 两个正整数,第一个表示n,第二个表示m. 输出格式: 一个整数,表示第n个素数到第m个素数之间所有的素数的和,包括第n个素数和第m个素数. 输入样例: 2 4 输出样例: 15 时间限制:500ms 内存限制

GPS数据处理 翁恺老师C语言程序设计CAP第10章编程题

NMEA-0183协议是为了在不同的GPS(全球定位系统)导航设备中建立统一的BTCM(海事无线电技术委员会)标准,由美国国家海洋电子协会(NMEA-The National Marine Electronics Associa-tion)制定的一套通讯协议.GPS接收机根据NMEA-0183协议的标准规范,将位置.速度等信息通过串口传送到PC机.PDA等设备. NMEA-0183协议是GPS接收机应当遵守的标准协议,也是目前GPS接收机上使用最广泛的协议,大多数常见的GPS接收机.GPS数据处

时间换算 翁恺老师C语言程序设计CAP第3章编程题

题目内容: 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到23

分解质因数 翁恺老师C语言程序设计CAP第5章编程题

题目内容: 每个非素数(合数)都可以写成几个素数(也可称为质数)相乘的形式,这几个素数就都叫做这个合数的质因数.比如,6可以被分解为2x3,而24可以被分解为2x2x2x3. 现在,你的程序要读入一个[2,100000]范围内的整数,然后输出它的质因数分解式:当读到的就是素数时,输出它本身. 输入格式: 一个整数,范围在[2,100000]内. 输出格式: 形如: n=axbxcxd 或 n=n 所有的符号之间都没有空格,x是小写字母x. 输入样例: 18 输出样例: 18=2x3x3 时间限制

Linux基础入门第三周作业【Linux微职位】

1.显示/var目录下所有以l开头,以一个小写字母结尾,且中间至少出现一位数字(可以有其它字符)的文件或目录. ls -d /var/l*[0-9]*[[:lower:]]或ls -d /var/l*[[:digit:]]*[[:lower:]] 命令测试结果 [[email protected] Desktop]# touch /var/l0a /var/la1Ab /var/lAB2abc [[email protected] Desktop]# ls -d /var/l*[0-9]*[[:

程序设计入门——C语言 第3周编程练习 2 数字特征值(5分)

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 数字奇偶

java入门第三步之数据库连接【转】

数据库连接可以说是学习web最基础的部分,也是非常重要的一部分,今天我们就来介绍下数据库的连接为下面学习真正的web打下基础 java中连接数据库一般有两种方式: 1.ODBC——Open Database Connectivity(开放数据库连接性):基于C语言的一套数据库编程接口,主要功能是提供数据库的访问和操作所有的数据库厂商对这套接口进行实现,不同数据库厂商提供的实现是不一样的,也就是通常所说的第三方支持,而这套编程接口就是我们的标准 2.JDBC——Java Database Conn