2016年2月8日 星期一

二信C++寒假練習-zerojudge之 四

// a015. 矩陣的翻轉
#include <iostream>
using namespace std;
int main( )
{
  int m,n,r,c;
  int a[100][100];
  while ((cin>>m>>n))
  {
          for(r=0;r<m;r++)
          {  for(c=0;c<n;c++)
             {
               cin>>a[r][c];
             }
          }
          for(c=0;c<n;c++)
          {  for(r=0;r<m;r++)
             {
               cout<<(r==0?"":" ")<<a[r][c];
             }
             cout <<endl;
          }
  }
  return 0 ;
}

// a020. 身分證檢驗 ,本題不需檢查輸入長度、及格式是否符合,純計算檢查碼是否正確
#include <iostream>
using namespace std;
int main( )
 {
    int seq[]={10,11,12,13,14,15,16,17,34,18,19,20,21,22,35,23,24,25,26,27,28,29,32,30,31,33};
    string pid;
    while ( cin>>pid ) {
       int L=seq[int(pid[0]-'A')];  //字母轉二位數
       int sum=L/10+(L%10)*9;       // 1*1,第2*9
       // 接著8個數字分別 *8 ~ * 1
       for(int i=1;i<=8;i++) sum+=( (pid[i]-'0')*(9-i) ) ;
       sum+=(pid[9]-'0');  //最後檢查碼 *1
       if(sum%10) cout<<"fake"<<endl; // ÷10的餘數非 0
       else cout<<"real"<<endl;
    }
    return 0 ;
}

// a022. 迴文
#include <iostream>
using namespace std;
int main( )
{
  string str;
  int i,n,s;
   while( cin>>str )
  {
     s=str.size();
     n=s/2;  //字串長度的一半
     s--;
     for(i=0;i<=n;i++)
          {
         if(str[i]!=str[s-i])   break;
     }
     if(i>n) cout<<"yes"<<endl;
     else cout<<"no"<<endl;
   }
   return 0;
}

// a024. 最大公因數(GCD)
#include <iostream>
using namespace std;
int main( )
{
  int a,b,q,r;
   while( cin>>a>>b )
  {
     r=a%b;
     while(r) {
       a=b;
       b=r;
       r=a%b;
     }
     cout<<b<<endl;
   }
   return 0;
}

// a034. 二進位制轉換
#include <iostream>
#include <vector>
using namespace std;
int main( )
{
    int k;
    while(cin >>k){
      vector <char> s; //動態陣列,以push_back01
      while( k ) 
                {       
        s.push_back((k%2)?'1':'0');
        k/=2;
      }
      for(k=s.size()-1;k>=0;k--) cout <<s[k]; 
                cout<<endl;
    }
    return 0 ;
}

// a038. 數字翻轉
#include <iostream>
using namespace std;
int main( )
{
  int n,b;
  while( cin>>n )
  {
    b=0;
     while(n)
          {
       b=b*10+n%10;
       n/=10;       
     }
    cout<<b<<endl;    
  }
    return 0 ;
}

// a054. 電話客服中心
#include <iostream>
using namespace std;
int main( )
 {
    int seq[]={10,11,12,13,14,15,16,17,34,18,19,20,21,22,35,23,24,25,26,27,28,29,32,30,31,33};
    string pid;
    int i;
    int ladd[26];  //字母要加的總和 先算出
    for(i=0;i<26;i++)
                ladd[i]=seq[i]/10 + seq[i]%10*9;
// 開始讀資料
    while ( cin>>pid )
         {
       int sum=0;
       for(int i=0;i<=7;i++) sum+=( (pid[i]-'0')*(8-i) ) ;
       sum+=(pid[8]-'0');
       for(i=0;i<26;i++)
                       if( (sum+ladd[i])%10==0 ) cout<<char('A'+i);   // 26個字母各試一次
       cout<<endl;
    }
    return 0 ;
}

// a065. 提款卡密碼
#include <iostream>
using namespace std;
int main( )
 {
    string pid;
    int i;
    while ( cin>>pid )
         {
      for(i=0;i<6;i++)
      {  if(pid[i]>pid[i+1]) cout<<int(pid[i]-pid[i+1]);
        else cout<<int(pid[i+1]-pid[i]);
      }
      cout<<endl;
    }
    return 0 ;
}

// a149. 乘乘樂
#include <iostream>
using namespace std;
int main()
{
  long long p; //有可能 > int ? 好像不會,使用int即可
  int i,n;
  string inp;
  cin >>n;
  while(n--)
  {
    cin>>inp;
    p=1;
    for(i=0; i<inp.size(); i++)
      p=p*(inp[i]-'0');
    cout<<p<<endl;
  }
  return 0;
}

// a215. 明明愛數數
#include <iostream>
using namespace std;
int main( )
 {
    int i,m,n;
    long long s;
    while ( cin>>n>>m )
         {     // m , n 有可能為負 ?
      i=1;s=n; //1個數
      while(s<=m) // > m 才停
                {
                        ++n;
         s += n;
         ++i;
      }
      cout<<i<<endl;
    }
    return 0 ;
}

// a216. 數數愛明明
#include <iostream>
using namespace std;
int main( )
 {
    int i,n;
    long long f[30000],g[30000];
    f[0]=g[0]=1;
    int m=1;
    while ( cin>>n )
         {
      if(n>m)
         for(i=m;i<n;i++)
         {
          f[i]=(i+1)+f[i-1];
          g[i]=f[i]+g[i-1];
         }
       cout<<f[n-1]<<" "<<g[n-1]<<endl;
    }
    return 0 ;
}

// a224. 明明愛明明  ,只有26字母,只要成對即可
#include <iostream>
using namespace std;
int main( )
 {
    int i,k,n;
    string s;
    bool m[26];
    while ( cin>>s )
         {
      for(i=0;i<26;i++) m[i]=false; // 26個字母做記號用
      n=s.size();
      for(i=0;i<n;i++)
      {
         if(s[i]>='A' && s[i]<='Z')   m[s[i]-'A'] = !m[s[i]-'A'];
         if(s[i]>='a' && s[i]<='z')   m[s[i]-'a'] = !m[s[i]-'a'];      
      }                     
      for(i=0,k=0;i<26;i++) if(m[i]) k++;
      if(k>1) cout <<"no..."<<endl;
      else  cout <<"yes !"<<endl;
    }
    return 0 ;
}


0 意見:

張貼留言