zcmu-1131: 第七章:早知道,是梦一场(思维题)

版权声明:本人大三在读,有错误烦请指正,共同进步- ( ゜- ゜)つロ 乾杯~点赞请按右上角,转载请标明出处: https://blog.csdn.net/hzyhfxt/article/details/84147578

 

Time Limit: 1 Sec  Memory Limit: 128 MB
Submit: 118  Solved: 44
[Submit][Status][Web Board]

Description

毕业,这个伤感的季节,总是伴着不舍。自闭而又敏感、自尊的陈孝正却在毕业的时候又选择了出国,放弃了郑微。此刻的郑薇,感觉像是梦一场回到了原点。

郑薇就像是这个数:102564,渡过了四年的大学时光,102564*4=410256,只是自己右移了一位,没有其他的不同。暂且我们把这样一类数叫做郑薇数,请你研究一下,如果给定两个数n和k,怎样找到一个的最小的郑薇数,使他的最右位恰好是数字k,且乘以n以后的数字等于自身数字循环右移一位。

Input

第一行是数字t,表示接下来有几组数据,每组数据单独成行,包括两个整数n和k(1<=n<=9&&1<=k<=9)。

Output

每组数据分别输出一个整数,且要单独成行,如果最小的郑薇数(且她的最右位恰好是数字k)存在,则输出他,否则输出0

Sample Input

1 4 5

Sample Output

128205

像我这种思维混乱型选手想了整整两天...还是学习了同学的代码之后再整明白的。。。

k*n 算出的第一位个位的结果,就是上面乘数的十位上的数字,一个个推上去就好了(我推了很久)

示意图如下:

 

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

int  main()
{
    int t,n,k;
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d%d",&n,&k);
        int i = 1,jw = 0;
        int a[10000] = {0};
        a[0] = k;
        while(1)
        {
            a[i] = a[i-1] * n + jw;
            //printf("a[%d] = %d  ",i,a[i]);
            if(a[i] == k)
                break;
            jw = a[i] / 10;
            a[i] %= 10;
            i++;
        }
        if(a[i-1] == 0) printf("0");
        else    for(int j = i-1;j >= 0;j--)    printf("%d",a[j]);
        puts("");
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/hzyhfxt/article/details/84147578