mys. 发表于 2020-12-11 20:28:44

求解,看不懂题,而且做不来

-             5 Have Fun with Numbers (20point(s))

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

jitianmoshen 发表于 2020-12-11 22:11:36

本帖最后由 jitianmoshen 于 2020-12-11 22:20 编辑

题目就是一个数比如1234567899的 两倍是2469135798,这两个数都是由1-8每个数都用了一次,9用了两次,让你检查输入的数是不是这样的数

#include <stdio.h>
int main(void)
{
    long long num1, num2, num3;
    int i, flag = 1;
    long long nums1 = {0}, nums2 = {0};
    printf("请输入一个数字:");
    scanf("%lld", &num1);
    num2 = num1 * 2;
    num3 = num2;
    while (num1)                              //把num1里面每个数字的个数保存到数组nums1里面
    {
      nums1++;
      num1 /= 10;
    }
    while (num2)                              //把num2里面每个数字的个数保存到数组nums2里面
    {
      nums2++;
      num2 /= 10;
    }
    for (i = 0; i <= 9;i++)               //检测num1和num2每个数字的个数是否相同
    {
      if (nums1 != nums2)                  
      {
            flag = 0;
            break;
      }
    }
    if (flag)
    {
      printf("YES!\n");
      printf("%lld\n",num3);
    }
    else
      printf("NO!\n");   
    return 0;
}

风过无痕1989 发表于 2020-12-11 23:00:58

请注意,数字123456789是一个9位数的数字,完全由1到9组成,没有重复。加倍,我们将得到246913578,它恰好是另一个9位数的数字,正好包含从1到9的数字,只是在不同的排列。如果我们再加倍看看结果!
现在,假设您要检查是否有更多具有此属性的数字。也就是说,用k个数字将一个给定的数字加倍,你要知道结果数字是否只由原始数字中的数字排列组成。
输入规格:
每个输入包含一个测试用例。每个案例包含一个不超过20位的正整数。
输出规格:
对于每个测试用例,如果将输入的数字加倍,则首先在一行中打印“Yes”,如果输入的数字仅由原始数字中的数字排列组成,则首先打印一行“No”。然后在下一行中,打印加倍的数字。

#include<stdio.h>
#include<string.h>
int digit; //静态初始化数组,默认值为0
int main()
{
        char ch;//20个以内的数字(10位的数已经不是int了,用字符比较方便一点)
        scanf("%s", ch);
        int len = strlen(ch), num, i, flag = 0;
        for (i = len - 1; i >= 0; i--)
        {
                num = ch - '0'; //char 转 int
                digit++;
                num = num * 2 + flag; //flag是进制,x2后,进制可能会加一
                flag = 0;
                if (num >= 10)
                {
                        num -= 10;
                        flag = 1;
                }
                ch = (num + '0'); //int 转 char
                digit--;
        }
        int flag1 = 0; //优化输出
        for (i = 0; i < 10; i++)
        {
                if (digit != 0)
                {
                        flag1 = 1;
                        break;
                }
        }
        printf("%s", (flag1 == 1) ? "No\n" : "Yes\n");
        if (flag == 1)
                printf("1");// 若有进位,先输出1
        printf("%s", ch);
        return 0;
}

*************************************************
1234567899
Yes
2469135798
请按任意键继续 。。。
页: [1]
查看完整版本: 求解,看不懂题,而且做不来