• 翁恺老师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 ",flag); return 0; }
  • 相关阅读:
    Ubuntu 上更新 Flash 插件
    Ubuntu 17.10 安装 “爱壁纸” 时,缺失了 python-support 依赖
    Windows 7 64 位操作系统安装 Ubuntu 17.10
    Linux CentOS 6.9(图形界面)安装中文输入法
    Linux 编译 apr-util 时报错
    Linux 添加普通用户到 sudoers 文件
    PHP 结合实例认识 Socket
    PHP 快速建立一个对象
    使用Git GUI,上传项目到github,并实现预览功能
    用JS判断号码
  • 原文地址:https://www.cnblogs.com/berryfad/p/4187918.html
Copyright © 2020-2023  润新知