c语言Have Fun with Numbers

这篇具有很好参考价值的文章主要介绍了c语言Have Fun with Numbers。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

题目

Have Fun with Numbers
Notice that the number 123456789 is a 9-digit number consisting exactly the numbers from 1 to 9, with no duplication. Double it we will obtain 246913578, which happens to be another 9-digit number consisting exactly the numbers from 1 to 9, only in a different permutation. Check to see the result if we double it again!

Now you are suppose to check if there are more numbers with this property. That is, double a given number with k digits, you are to tell if the resulting number consists of only a permutation of the digits in the original number.

Input Specification:
Each input contains one test case. Each case contains one positive integer with no more than 20 digits.

Output Specification:
For each test case, first print in a line “Yes” if doubling the input number gives a number that consists of only a permutation of the digits in the original number, or “No” if not. Then in the next line, print the doubled number.

Sample Input:
1234567899
Sample Output:
Yes
2469135798

背景

额,这道题在我大一时就遇到了。当时才学c语言,用的是笨办法,结果是部分正确。由于考研需要,近期重返了c语言,虽然二年没摸c语言了,但是由于大一时苦练,很快就拾起来了。现在看到这个题目时,觉得当年的代码写的跟**一样。不过我也感谢大一时的坚持。很快,我对这题就有了新的思路。

新的思路

总体思路

统计乘积前和乘积后序列各数字的频度,然后进行比较频度即可。

细说:

由于数字只有0-9,且序列长度不会超过20。所以用一有10个有效字符的字符数组存储频度即可。这样空间复杂度为O(1)。时间复杂度为O(n)。

#include"stdio.h"
#include"string.h"
int main(){
    char array[21]="\0";//保存原序列,经算法后,保存的是乘积后的序列。(若最高位溢出,不保存溢出位1。)
    gets(array);
    char freq[2][11]={"\0","\0"};//一维保存原序列个数字出现的频度,二维保存乘积后各数字出现的频度
    int length=strlen(array);
    int j=0;//工具
    int overFlow=0;//某位乘积加上低位进位后是否溢出。0位没溢出,1位溢出。
    int i=length - 1;
    while(i>=0){
        j=array[i]-'0';
        freq[0][j]+=1;//原序列 相应数字频度+1
        j=j*2;//单位数乘2
        if(overFlow==1){
            j++;
            overFlow=0;
        }
        //处理进位。找到不为9的前一位
        if(j>9){
            j=j%10;//产生乘积后的个位数字。
            overFlow=1;
        }
        freq[1][j]+=1;//乘积后个位数字的频度加1。有了上面if,保证了0=<j<=9
        array[i]=j+'0';
        i--;
    }

    //对比各数字频度是否相等
    for(int x=0;x<10;x++){
        if(freq[0][x]!=freq[1][x]){
            printf("No\n");
            break;
        }
        if(x==9)
            printf("Yes\n");
    }
    if(overFlow==1){
        printf("1");
    }
    puts(array);
    return 0;
}

c语言Have Fun with Numbers文章来源地址https://www.toymoban.com/news/detail-433659.html

到了这里,关于c语言Have Fun with Numbers的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • TCP Port numbers reused

    TCP Port numbers reused - 知乎 (zhihu.com) (608条消息) tcp port numbers reused出现原因_高并发架构的TCP知识介绍_weixin_39878698的博客-CSDN博客  7.5. TCP Analysis (wireshark.org) 网络不通,会报  这个错误... (608条消息) tcp port numbers reused出现原因_TCP连接出现大量TimeWait状态的连接-原因解析_weixin_3

    2024年01月25日
    浏览(76)
  • 【算法】Add Two Numbers 两数相加

    给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。 请你将两个数相加,并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外,这两个数都不会以 0 开头。 每个链表中的节点数在范围

    2024年02月11日
    浏览(46)
  • simulink之Fixed-Point Numbers

    定点数及其数据类型的特征在于它们的字大小(以位为单位)、二进制点以及它们是有符号的还是无符号的。定点设计器™ 软件支持整数和定点数。这些数据类型之间的主要区别在于它们的二进制点。 注意:定点数字的字大小最多可达128位。 二进制定点数的常见表示形式,

    2024年01月19日
    浏览(29)
  • 【Edibat 算法 ★★★★★★】【吸血鬼数字】Vampire Numbers

    Vampire Numbers recursion permutation brute force A Vampire Number is a positive integer greater than 99, that rearranged in all of its possible digits permutations, with every permutation being split into two parts, is equal to the product of at least one of its permutations. If the number has an even quantity of digits, left and right parts will have the s

    2024年02月07日
    浏览(31)
  • leetcode 445. Add Two Numbers II(两数相加)

    用链表代表2个数字,这2个数字相加的和用链表返回。 最高位在链表的head. 思路: 1.链表逆序 数字相加是从低位到高位的,然而链表中的数字是从高位指向低位。 所以涉及到链表的逆序。 逆序之后只需从head到tail把两个链表的数字相加,再用一个int表示进位。 链表的逆序

    2024年02月16日
    浏览(45)
  • Leetcode 1022. Sum of Root To Leaf Binary Numbers (树遍历题)

    Sum of Root To Leaf Binary Numbers Easy 3.3K 183 Companies You are given the root of a binary tree where each node has a value 0 or 1. Each root-to-leaf path represents a binary number starting with the most significant bit. For example, if the path is 0 - 1 - 1 - 0 - 1, then this could represent 01101 in binary, which is 13. For all leaves in the tree, cons

    2024年02月03日
    浏览(49)
  • 【算法】Sum of Imbalance Numbers of All Subarrays 所有子数组中不平衡数字之和-进阶篇

    一个长度为 n 下标从 0 开始的整数数组 arr 的 不平衡数字 定义为,在 sarr = sorted(arr) 数组中,满足以下条件的下标数目: 0 = i n − 1 ,和 s a r r [ i + 1 ] − s a r r [ i ] 1 0 = i n - 1 ,和 sarr[i+1] - sarr[i] 1 0 = i n − 1 ,和 s a rr [ i + 1 ] − s a rr [ i ] 1 这里,sorted(arr) 表示将数组 arr 排序

    2024年02月13日
    浏览(52)
  • attempt to compare nil with number -- 黑马点评出现问题

     问题情况 :   主要问题 :  调用lua执行redis时,有一个值会接受nil(因为redis中没有该数据)或者数值,当该值为nil时执行报错,因为会用到将该值与其他数字比较,故报错attempt to compare nil with number 当然运行前手动在redis中加上SecKill:stock:voucherId对应的值也行,但也可以通过

    2024年04月28日
    浏览(29)
  • MobaXterm 连接服务器超过指定连接数量(默认14个)Warning: you have reached the maximum number of saved sessions for the

    错误提示: Warning: you have reached the maximum number of saved sessions for the personal edition of MobaXterm. You can start a new session but it wil not be automatically saved. Please support MobaXterm by subscribing to the Professional edition here: https://mobaxterm.mobatek.net 意思就是:警告:您已达到个人版MobaXterm的最大保存会话

    2024年02月14日
    浏览(96)
  • 解决:Invalid prop:Expected String with value “30“, got Number with value 30.的问题

    其一、报错的代码信息为: Invalid prop: type check failed for prop \\\"label\\\". Expected String with value \\\"30\\\", got Number with value 30. 中文翻译: 无效的道具:道具“标签”的类型检查失败。 预期值为“30”的字符串,得到值为 30 的数字。 其二、报错的页面显示为: 其三、想要的结果: 在 tabl

    2024年02月13日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包