#UVa:10473-Simple Base Conversion

利用C++中的hex,dec以及C語言的%X,%x,%d來讓輸入輸出自己做轉換即可。

C++(0.124)

/*******************************************************/
/* UVa 10473 Simple Base Conversion                    */
/* Author: LanyiKnight [at] knightzone.org             */
/* Version: 2011/12/17                                 */
/*******************************************************/
#include<iostream>
#include<sstream>
#include<cstdio>
using namespace std;

int main(){
  string s;
  stringstream ss;
  int num;
  while( cin >> s ){
    if( s[0] == '-' )
      break;
    ss.clear();
    ss.str(s);
    if( s[1] == 'x' ){
      ss >> hex >> num;
      printf( "%d\n", num );
    }
    else{
      ss >> dec >> num;
      printf( "0x%X\n", num );
    }
  }
  return 0;
}

#UVa:10370-Above Average

照著題目算即可得解。

C++(0.024)

/*******************************************************/
/* UVa 10370 Above Average                             */
/* Author: LanyiKnight [at] knightzone.org             */
/* Version: 2011/12/14                                 */
/*******************************************************/
#include<iostream>
#include<cstdio>
using namespace std;

int main(){
  int C, N;
  float score[1005], average, percent;
  while( scanf( "%d", &C ) != EOF ){
    for( int i = 1 ; i <= C ; i++ ){
      scanf( "%d", &N );
      average = 0.0;
      for( int j = 0 ; j < N ; j++ ){
        scanf( "%f", &score[j] );
        average += score[j];
      }
      average /= N;
      percent = 0.0;
      for( int j = 0 ; j < N ; j++ ){
        if( score[j] > average ) percent++;
      }
      percent /= N;
      percent *= 100;
      printf( "%.3f%%\n", percent );
    }
  }
  return 0;
}

#UVa:10340-All in All

利用兩個變數i,sindex,i從t開始搜,搜到與s[sindex]一樣就讓sindex++,這樣到最後如果sindex與s字串的長度一樣,即表示答案是Yes,反之則是No。

C++(0.016)

/*******************************************************/
/* UVa 10340 All in All                                */
/* Author: LanyiKnight [at] knightzone.org             */
/* Version: 2011/12/05                                 */
/*******************************************************/
#include<iostream>
#include<cstdio>
using namespace std;

int main(){
  string s, t;
  while( cin >> s >> t ){
    int sindex = 0;
    for( int i = 0 ; i < t.length() ; i++ ){
      if( t[i] == s[sindex] ){
        sindex++;
        if( sindex == s.length() ) break;
      }
    }
    if( sindex == s.length() )
      printf( "Yes\n" );
    else
      printf( "No\n" );
  }
  return 0;
}

#UVa:10300-Ecological Premium

只要把所有農夫各自的農場面積和環境等級相乘之後再求總和即是解答。

C++(0.008)

/*******************************************************/
/* UVa 10300 Ecological Premium                        */
/* Author: LanyiKnight [at] knightzone.org             */
/* Version: 2011/12/04                                 */
/*******************************************************/
#include<iostream>
#include<cstdio>
using namespace std;

int main(){
  int n, f, area, animal, eco, money;
  while( scanf( "%d", &n ) != EOF ){
    for( int i = 0 ; i < n ; i++ ){
      money = 0;
      scanf( "%d", &f );
      for( int j = 0 ; j < f ; j++ ){
        scanf( "%d%d%d", &area, &animal, &eco );
        money += area * eco;
      }
      printf( "%d\n", money );
    }
  }
  return 0;
}

#UVa:10222-Decode the Mad man

先把鍵盤輸入成一個字元陣列,這樣比較好轉換。

C++(0.016)

/*******************************************************/
/* UVa 10222 Decode the Mad man                        */
/* Author: LanyiKnight [at] knightzone.org             */
/* Version: 2011/12/01                                 */
/*******************************************************/
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;

int main(){
  const char keyboard[] = "`1234567890-=qwertyuiop[]\\asdfghjkl;'zxcvbnm,./";
  const int kblength = strlen( keyboard );
  string s;

  while( getline( cin, s ) ){
    for( int i = 0 ; i < s.length() ; i++ )
      if( s[i] == ' ' )
        printf( " " );
      else
        for( int j = 0 ; j < kblength ; j++ )
          if( keyboard[j] == s[i] ){
            printf( "%c", keyboard[j-2] );
            break;
          }
    printf( "\n" );
  }
  return 0;
}

#UVa:10209-Is This Integration ?

要算面積,令邊長為a,一塊斜線的面積為x,一塊點狀的面積為y,一塊格子狀的面積為z。

則首先正方形的面積減去四分之一以a為半徑的圓的面積 = a*a – a*a*π/4 = y+2*z ->(1)

再來六分之一以a為半徑的圓的面積減去以a為邊長的正三角形(想想看在哪裡…) = a*a*π/6 – a*a*sqrt(3.0)/4 = 假設為某個面積w(想想看在哪裡…) ->(2)

接著把四分之一以a為半徑的圓的面積減去六分之一以a為半徑的圓的面積 = a*a*π/4 – a*a*π/6 = y+z+w ->(3)

則z=(y+2*z)-(y+z+w)+w=(1)-(3)+(2)就出來了,那麼y=(y+2*z)-(2*z)=(1)-2*z也出來了,而x=a*a-4*y-4*z也跟著出來了!

C++(0.044)

/*******************************************************/
/* UVa 10209 Is This Integration?                      */
/* Author: LanyiKnight [at] knightzone.org             */
/* Version: 2011/12/01                                 */
/*******************************************************/
#include<iostream>
#include<cstdio>
#include<cmath>
#define PI (2.0*acos(0.0))
using namespace std;

int main(){
  double a;
  while( scanf( "%lf", &a ) != EOF ){
    double x, y, z;
    z = a*a - a*a*PI/4.0;
    z -= a*a*PI/4.0 - a*a*PI/6.0 - ( a*a*PI/6.0 - a*a*sqrt(3.0)/4.0 );
    y = a*a - a*a*PI/4.0 - 2.0*z;
    x = a*a - 4.0*y - 4.0*z;
    printf( "%.3lf %.3lf %.3lf\n", x, 4*y, 4*z );
  }
  return 0;
}

#UVa:10141-Request for Proposal

照著題目要求的做即可。

P.S. 所有名稱都有可能中間有空白。

C++(0.012)

/*******************************************************/
/* UVa 10141 Request for Proposal                      */
/* Author: LanyiKnight [at] knightzone.org             */
/* Version: 2011/11/30                                 */
/*******************************************************/
#include<iostream>
#include<cstdio>
using namespace std;

struct Factory{
  string name;
  float d;
  int r;
};

int main(){
  int n, p;
  int RFP = 0;
  string requirement;
  Factory fac, best; 
  while( scanf( "%d%d", &n, &p ) != EOF && ( n || p ) ){
    if( RFP ) printf( "\n" );
    getchar(); /* delete the enter key */
    for( int i = 0 ; i < n ; i++ )
      getline( cin, requirement );

    best.r = 0;
    for( int i = 0 ; i < p ; i++ ){
      getline( cin, fac.name );
      scanf( "%f%d", &(fac.d), &(fac.r) );
      getchar(); /* delete the enter key */
      for( int j = 0 ; j < fac.r ; j++ )
        getline( cin, requirement );
      if( best.r < fac.r )
        best = fac;
      else if( best.r == fac.r && best.d > fac.d )
        best = fac;
    }
    printf( "RFP #%d\n%s\n", ++RFP, best.name.c_str() );
  }
  return 0;
}

#UVa:10107-What is the Median?

數值一直由小到大插入陣列中,即可得其中位數。

C++(0.040)

/*******************************************************/
/* UVa 10107 What is the Median?                       */
/* Author: LanyiKnight [at] knightzone.org             */
/* Version: 2011/11/30                                 */
/*******************************************************/
#include<iostream>
#include<cstdio>
using namespace std;

int main(){
  int N[10005], top = 0, temp;
  while( scanf( "%d", &N[top++] ) != EOF ){
    for( int i = 0 ; i < top ; i++ )
      if( N[top-1] > N[i] ){
        temp = N[top-1];
        for( int j = top-1 ; j > i ; j-- )
          N[j] = N[j-1];
        N[i] = temp;
        break;
      }
      if( top % 2 )
        printf( "%d\n", N[top/2] );
      else
        printf( "%d\n", (N[top/2]+N[top/2-1])/2 );
  }
  return 0;
}

#UVa:10082-WERTYU

先把鍵盤打成一個陣列,這樣比較好得解。

C++(0.012)

/*******************************************************/
/* UVa 10082 WERTYU                                    */
/* Author: LanyiKnight [at] knightzone.org             */
/* Version: 2018/06/02                                 */
/*******************************************************/
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;

int main(){
  const char keyboard[] = " `1234567890-=QWERTYUIOP[]\\ASDFGHJKL;'ZXCVBNM,./";
  const int kblen = strlen(keyboard);
  char hash[256];
  string s;

  for(int i = 0 ; i < 256 ; ++i){
    hash[i] = i;
  }

  for( int i = 2 ; i < kblen ; ++i ){
    hash[keyboard[i]] = keyboard[i-1];
  }

  while(getline(cin, s)){
    for(int i = 0 ; i < s.length() ; i++){
      printf( "%c", hash[s[i]] );
    }
    printf( "\n" );
  }

  return 0;
}

#UVa:10071-Back to High School Physics

這題只要套公式即可得解。

P.S. 因為是一等速度運動,所以位移的公式就是 平均速度 * 經過的時間,而因為正好是要兩倍時間後的位移,所以此時的速度即為平均速度,再乘上2倍時間即得解。

C++(0.036)

/*******************************************************/
/* UVa 10071 Back to High School Physics               */
/* Author: LanyiKnight [at] knightzone.org             */
/* Version: 2011/11/29                                 */
/*******************************************************/
#include<iostream>
#include<cstdio>
using namespace std;

int main(){
  int v, t;
  while( scanf( "%d%d", &v, &t ) != EOF ){
    printf( "%d\n", 2*v*t );
  }
  return 0;
}
共 40 頁 1 36 37 38 39 40