Easy Problem 2 奇妙的数字
2019獨角獸企業重金招聘Python工程師標準>>>
原文地址:https://my.oschina.net/meiguizhinian/blog/873703
Description
有一種自然數,它的各位數字之和能被17整除。這個數的后繼數(即這個數加1)的各位數字之和也能被17整除。求所有自然數中,從小到大第n個這樣的數。
The Input
你的程序需要從標準輸入設備(通常為鍵盤)中讀入多組測試數據。每組輸入數據占一行,其中僅有一個整數n(1≤n≤10)。在行首和行尾沒有多余的空格。所有數據前后沒有多余的空行,兩組數據之間也沒有多余的空行。
The Output
對每組測試數據,你的程序需要向標準輸出設備(通常為啟動該程序的終端)依次輸出一組對應的答案。每組答案占一行,每行中僅有一個整數,即題問描述中的第n個數。在行首和行尾不要輸出多余的空格。在所有數據的前后,以及兩組數據之間不要輸出多余的空行。
Sample Input
1 3?
Sample Output
8899 17899解題思路
????因為各位數字之和能被17整除,所以這數字各位之和是17的整數倍,所以最小值是89。
????因為各位數字之和+1后能被17整除,那么+1的時候必然發生了進位,所以個位數字一定是9。
????如果只發生1次進位,那么這個數字各位和+1前后的差值是8,那么必然有一個數字不能被17整除,所以十位數字也必然是9,不符合。
????如果發生了2次進位,那么這個數字各位和+1前后的差值是17,如果一個數可以被17整除,那么+1后必然可以被17整除。
????如果發生了3次進位,那么這個數字各位和+1前后的差值是26,不符合。
????如果發生了4次進位,那么這個數字各位和+1前后的差值是35,不符合。
????...
????如果發生了n次進位,那么這個數字各位和+1前后的差值是9*n-1,這個差值要能被17整除。
????綜上得到關系式:9*n-1=17*m。
????根據這個關系式,我們可以找出當n<10的時候,值有n=2符合條件。
????所以十位數字和個位數字都是9,而99不能被17整除,所以這個數至少是3位的,且百位數字不能為9
????十位數字+個位數字=18。
????那么其他位的數字和至少需要34-18=16,那么如果這個數字僅有3位,不達不到要求的。所以這個數字至少4位。
????形如:xa99(a!=9),x表示所有其他位數
????因為這個數字+1后也要能被17整除,所以x+a+1必須是是17的整數倍,那么x+a最小值是16,所以xa的最小值是88。
代碼
#include <stdio.h> int easy02_sum_digit(long num){int sum = 0;while (num) {sum+=num%10;num/=10;}return sum; }int main(){int k=0;int begin = 88;int list[10] = {};while (k!=10) {if ((easy02_sum_digit(begin)+18)%17==0 && easy02_sum_digit(begin+1)%17==0) {list[k++] = begin*100+99;}++begin;}while (scanf("%d",&k)!=EOF) {printf("%d\n",list[k-1]);}return 0; }?
轉載于:https://my.oschina.net/meiguizhinian/blog/873703
總結
以上是生活随笔為你收集整理的Easy Problem 2 奇妙的数字的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 第一天作业笔记
- 下一篇: 微服务开发的12项要素