1. 程式人生 > >csu 1958: 數字遊戲

csu 1958: 數字遊戲

ios href tput name 數字 for ima 得出 ++

1958: 數字遊戲

Time Limit: 2 Sec Memory Limit: 128 Mb Submitted: 134 Solved: 19


Description

小明今年才上一年級,加減法只會算加一和減一。老師就是喜歡看小明寫不出題目的樣子,所以給小明出了個難題:給出兩個數字x,y,每次可以讓數字的某一位加一或者減一(0減1變成9,9加1變成0)。問從x變到y至少要幾次操作?小明雖然數學不好但是編程很強呀,他很快就得出了正確答案,現在看你的了~
註意:每次變換只能變動除前導零的數位。例如1109變成0109後不能變再成1109或者9109,但是單就一個數字0可以變成1或9。

Input

第一行是一個數字T(T<=10)表示數據組數
接下來T行,每行兩個數字x,y(0<=x,y<=100000)
x和y不包含前導零

Output

輸出包括T行,第i行對應第i組數據的答案.
如果x無法變成y,輸出-1

Sample Input

3
10 11
99 100
52 75

Sample Output

1
-1
5

Hint

Source

2017年6月月賽-暨中南大學暑期集訓選拔賽第二場

Author

盧銘威

題解:這個題目我是沒有想明白 為什麽要2sec 0ms的事情

先比較一下這個 數字的長度 判斷前一個數字可不可以轉變成第二個 如果可以的話

從最後一位可以變 一個循環遍歷所有位就可以了 數據最大才6位數

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<math.h>
 4 #include<algorithm>
 5 #include<stdlib.h>
 6 using namespace std;
 7 int main()
 8 {
 9     int n,x,y,num1,num2,ans;
10     scanf("%d",&n);
11     while(n--)
12     {
13 ans=0; 14 scanf("%d%d",&x,&y); 15 int temp1=x,temp2=y; 16 num1=num2=0; 17 while(temp1>0) 18 { 19 temp1/=10; 20 num1++; 21 } 22 while(temp2>0) 23 { 24 temp2/=10; 25 num2++; 26 } 27 if(num1<num2) 28 { 29 printf("-1\n"); 30 continue; 31 } 32 for(int i=0;i<num1;++i) 33 { 34 temp1=x%10; 35 temp2=y%10; 36 int h=abs(temp1-temp2); 37 ans+=min(h,10-h); 38 x/=10; 39 y/=10; 40 } 41 printf("%d\n",ans); 42 } 43 return 0; 44 }

csu 1958: 數字遊戲