1. 程式人生 > >hdu 1271 整數對(找規律)

hdu 1271 整數對(找規律)

Problem Description
Gardon和小希玩了一個遊戲,Gardon隨便想了一個數A(首位不能為0),把它去掉一個數字以後得到另外一個數B,他把A和B的和N告訴了小希,讓小希猜想他原來想的數字。不過為了公平起見,如果小希回答的數雖然不是A,但同樣能達到那個條件(去掉其中的一個數字得到B,A和B之和是N),一樣算小希勝利。而且小希如果能答出多個符合條件的數字,就可以得到額外的糖果。
所以現在小希希望你編寫一個程式,來幫助她找到儘可能多的解。
例如,Gardon想的是A=31,B=3 告訴小希N=34,
小希除了回答31以外還可以回答27(27+7=34)所以小希可以因此而得到一個額外的糖果。

Input
輸入包含多組資料,每組資料一行,包含一個數N(1<=N<=10^9),檔案以0結尾。

Output
對於每個輸入的N,輸出所有符合要求的解(按照大小順序排列)如果沒有這樣的解,輸出”No solution.”

Sample Input

34
152
21
0

Sample Output

27 31 32
126 136 139 141
No solution.

解析:

1、首先設X的第k位拿走,然後加上加上X的和正好等於N。
2、這樣可以把X 分解成:X= a+b * 10^k +c * 10^( k+1 );
a代表的是第k位後面的低位數子,可能是多位,
b僅僅代表一個數值,即選擇拿開的那位數,
c代表的是比k位高的高位數字,
例如:234567拿走4時有,這時候a=567,b=4,c=23。

3、然後拿走之後剩下的會組合成另一個數:Y=a + c * 10^k。

4、可以得出X+Y=2 * a + b * 10 ^k +11 * c * 10^k。因此如果N=X+Y;則必定滿足這種結構。

5、綜上得出3個式子:

A == a + b * 10^k + c * 10^(k+1)
B == a + c * 10^k
N == A + B == 2 * a + b * 10^k + c * 10^k * 11

6、因為b是一位數,則b * 10^k不會進位,用10^k除N取整就可以得到b + 11c,再除以11,商和餘數就分別是c和b了。另外a是一個小於10^k的數沒錯,
而2a可能產生進位,這樣就使得b + 11c不符合要求。
但是這可以解決,因為進位最多為1,即b可能實際上是b+1(因為在這種情況下,用10^k除N取整就可以得到1+b + 11c),
b本來最大是9,那現在是10,但不會影響到除11求得的c。
然後根據2a進位和不進位兩種情況,分別考慮b要不要-1(進位-1,不進位不減),再求a,驗算,OK。

7、迭代k從最低位到最高位做一遍,就可以找出所有可能的A。

8、要保證b和c不能同時為0。

9、還有一點需要注意的就是重複問題:例如5002,那麼可能會輸入2次502.第一次去掉十位上的0,第二次去掉百位上的0,如果使用STL的set的話,就可以順利解決這個問題,另外set會自動排序,預設升序。

#include<iostream>
#include<algorithm>
using namespace std;
int s[105];
int main()
{
    int n;
    while(cin>>n)
    {
        if(n==0)
          break;
        int p=0,b,c,a;
        for(int k=1;k<=n;k*=10)
        {
            c=(n/k)/11;
            b=(n/k)%11;
            if(b+c&&b<10)       //不進位 
            {
                a=(n-b*k-11*c*k)/2;
                if(n==2*a+b*k+11*c*k)
                  s[p++]=a+b*k+10*c*k;
            }
            b--; 
            if(b+c&&b>=0)     //進位後 
            {
                a=(n-b*k-11*c*k)/2;
                if(n==2*a+b*k+11*c*k)
                  s[p++]=a+b*k+10*c*k;
            }
        }
        if(p)
        {
            sort(s,s+p);
            cout<<s[0];
            for(int i=1;i<p;i++)
              if(s[i]!=s[i-1]         //去重
                cout<<" "<<s[i];
            cout<<endl;
        }
        else
          cout<<"No solution."<<endl;
    }
    return 0;
}

相關推薦

hdu 1271 整數規律

Problem Description Gardon和小希玩了一個遊戲,Gardon隨便想了一個數A(首位不能為0),把它去掉一個數字以後得到另外一個數B,他把A和B的和N告訴了小希,讓小希猜想他原來想的數字。不過為了公平起見,如果小希回答的數雖然不是A,但同

HDU 3788——ZOJ問題規律

題目連結 從樣例中找到其規律 就是第一次出現z的之前字元的個數 ×第一次出現z和最後出現j之間的‘o’的個數(且不能為空)=最後出現j之後的字元個數Accepted;(同理zoj也適用) #include<iostream> #include<set> #incl

HDU 1041 Computer Transformation規律加大數乘

esp ios ctype nsf printf stream ont tac tran 主要還是找規律,然後大數相乘 #include<stdio.h> #include<string.h> #include<math.h> #inc

HDU 6267 Master of Random 規律

題意: 給你n(n<=1e5)個節點。第i個節點的父親是隨機的,範圍為0~i-1。 定義一棵樹的值為    其中val[i]為以i為根的子樹的所有點的權值之和。 給你a[i](i=1~n)(每個點的權值),求所有可能的樹的平均值。

HDU-4015:Mario and Mushrooms規律

Mario and Mushrooms Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65768/65768 K (Java/Othe

HDU 1005 Number Sequence規律,思維

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 153140    Accepted Submissio

hihocode 1584 : Bounce 規律2017 北京網絡賽G

hihocode sin scanf 容易 pac pre ace clas esp 題目鏈接 比賽時隨便找了個規律,然後隊友過了。不過那個規律具體細節還挺煩的。剛剛偶然看到Q巨在群裏提到的他的一個思路,妙啊,很好理解,而且公式寫起來也容易。OrzQ巨 #includ

Fibonacci數列規律

math println scanner line for each str BE java void 題目描述 Fibonacci數列是這樣定義的:F[0] = 0F[1] = 1for each i ≥ 2: F[i] = F[i-1] + F[i-2]因此,Fibo

構造隊列規律

發現 void desc ger 一個空格 .... esc exti () 題目描述 小明同學把1到n這n個數字按照一定的順序放入了一個隊列Q中。現在他對隊列Q執行了如下程序: while(!Q.empty()) //隊列不空,執行循環 {

xdoj 1330---異或規律

ref pri discus 運算 討論版 \n 打表 discuss 一道 我是打表找的規律 233 樣例什麽作用都沒有 只會迷惑作用。。。 1330: 天才琪露諾的完美算數教室 時間限制: 1 Sec 內存限制: 128 MB Special Judge提

Segments CodeForces 909B 規律

arr ssi wid mov single 分享圖片 要求 num 最優 Description You are given an integer N. Consider all possible segments (線段,劃分)on the coo

2018 ICPC 沈陽網絡賽預賽 Supreme Number規律

std str c_str 位數 clu lib 由於 for else 【傳送門】https://nanti.jisuanke.com/t/31452 【題目大意】:給定一個數字(最大可達10100),現在要求不超過它的最大超級質數。超級質數定義:對於一個數,把它看成

Happy Number規律

[提交] [狀態] [討論版] [命題人:admin] 題目描述 Consider the following function f defined for any natural number n: f(n) is the number obtained by summing up

Codeforces Round #514 (Div. 2) C.Sequence Transformation規律

題意:給定一個數字,找從1到n這n個數字的最大公約數,然後從這n個數字中去掉一個數字,使得去掉之後剩下的n-1個數字的最大公約數能比之前的大,每次都去掉一個數字,使得最大公約數能夠最快的上升。 思路:列出1到9的答案:1:1,2:12,3:113,4:1124,5:11124,6:111226,

hihoCoder - 1878 Palindromes 規律2018ICPC北京I

時間限制:1000ms 單點時限:1000ms 記憶體限制:512MB 描述 Recently, Nvoenewr learnt palindromes in his class. A palindrome is a nonnegative integer that is t

ACM 2018 北京區域賽 I - Palindromes 規律

HihoCoder - 1878 題目大意:        給出k,讓求出第k個迴文數(k的“長度”不超過1e5) 題解:        真是一道給人警醒的題目 &

zcmu-2269: Double Cola規律

2269: Double Cola Time Limit: 2 Sec  Memory Limit: 256 MB Submit: 34  Solved: 26 [Submit][Status][Web Board] Description time limit

55 博弈規律

Alice and Bob are playing a stone game. Initially there are n piles of stones and each pile contains some stone. Alice stars the game an

Pagodas 規律

n pagodas were standing erect in Hong Jue Si between the Niushou Mountain and the Yuntai Mountain, labelled from 1 to n. However, only two

codeforces976B規律

題目連結:http://codeforces.com/contest/976/problem/B題意:給出個n*m的矩陣,再給出一個k,起始點為(1,1)讓你按照蛇那樣在矩形中走,問最終位置。程式碼:#