這次的題目是http://e-tutor.itsa.org.tw/e-Tutor/mod/programming/view.php?a=18213

同時也是第53次ITSA的題目

這題比較麻煩的是要怎麼判斷甚麼時候該往前數或是往後數,找出其中花費最少的次數

如果一開始是0而密碼是9該怎麼轉呢

往後數的話就是9次,往前數的話就只要1次

再來

從0轉到6呢

往後數就是6次,那往前就是4次

0轉到5呢

往後是5次,往前也是5次

發現其中的規律了嗎?

往前往後的次數加起來是10,而當其中一個的次數>5,那麼另外一個就是較少的次數了

所以只要將同一個位置的密碼相減,如果這結果>5,就用10減掉它

再把所有位置的次數加起來印出,這題就解決了

  1. #include <iostream>  
  2. #include <string.h>  
  3. #include <sstream>  
  4. #include <vector>  
  5. using namespace std;  
  6.   
  7. int main()  
  8. {  
  9.     int num;  
  10.     cin>>num;  
  11.     cin.get();  
  12.     for(int i=0;i<num;i++)  
  13.     {  
  14.         string input;  
  15.         vector<vector<int> >arr;  
  16.         getline(cin,input);  
  17.         istringstream delim(input);  
  18.         string token;  
  19.         while(getline(delim,token,' '))  
  20.         {  
  21.             vector<int>inside;  
  22.             for(int j=0;j<token.length();j++)  
  23.             {  
  24.                 inside.push_back(token[j]-'0');  
  25.             }  
  26.             arr.push_back(inside);  
  27.         }  
  28.         int sum=0;  
  29.         int gap;  
  30.         for(int j=0;j<arr[0].size();j++)  
  31.         {  
  32.             gap=arr[1][j]-arr[0][j];  
  33.             if(gap<0)  
  34.                 gap*=-1;  
  35.             if(gap>5)  
  36.                 gap=10-gap;  
  37.             sum+=gap;  
  38.         }  
  39.         cout<<sum<<endl;  
  40.     }  
  41.     return 0;  
  42. }  

 

 

若想閱讀相關文章請關注我的粉絲團

小資菜鳥向前衝

https://www.facebook.com/%E5%B0%8F%E8%B3%87%E8%8F%9C%E9%B3%A5%E5%90%91%E5%89%8D%E8%A1%9D-204484273323335/?fref=ts

​​​​​​​

文章標籤
創作者介紹

cychss6305的部落格

cychss6305 發表在 痞客邦 PIXNET 留言(0) 人氣()