2016年1月14日 星期四

TO P1忠孝的題目及參考解

普一忠孝C++實作題   班級:    座號:    姓名:         學號:           電腦崗位:

C:\ 或本機硬碟建一子資夾為學號的後3碼,假設學號為411789,則建一子資料夾為 c:\789
  以下的題目完成後皆存放至此 c:\789的資料夾內,存檔檔名與題號同名a001~a020x031x032

5題:請寫出題號,前3題自選:第1題由a001~a005選、第2題由a006~a010選、第3題由a011~a015選、
4題必須由左依序在{a0##a0##a0##a018}中找第1個未出現在你自選的題號
5題由老師自訂題目兩題中選1題:題目為x031x032

1 ________ 2 _______ 3 _______ 4 _______ 5 _______  (每題各5分)

舉例:(1)假設我選的是a001a006a011則我第4題必須選a0##
      (2)
假設我選的是a002a006a011則我第4題必須選a0##
      (3)
假設我選的是a001a005a012則我第4題必須選a0##
   若還不確定,請向老師詢問,選錯該題打6折

afa 自訂題目 說明
x031 比大小

輸入3個正整數 a b c,其中 0< a,b,c <99
  ab比大小,但是會根據c的值而有不同的大小
優先序如下(1)~(3)

(1)c被3整除 , a與b比個位數的大小
(2)c被2整除 , a與b比十位數的大小

(3)其它的c , a與b比兩位數和的大小
 
例如輸入範例的第1 a=58,b=67,c=12
 c為12,被3整除也被2整除,優先以(1)比較個位數,而a的個位數比b的個位數大故a較大

輸出1個字元
a大則印出大寫的字元’A’
b大則印出大寫的字元’B’
若相等則印出大寫的字元’C’

輸入範例:
58 67 12
58 67 10
58 67 11

輸出範例:
A
B
C
x032:摸彩

輸入3個正整數 a b c,其中 0< a,b,c <99
  根據這3個數字對獎,可以累積的獎金會因c值而變
優先序如下(1)~(3)

(1)c被3整除, 可以累積最多3種獎金
(2)c被2整除, 可以累積最多2種獎金

(3)其它的c   , 只能選最高的1種獎金
 
可對獎金額:
 a b 相同 300
 a 不是3的倍數  200
 不是2的倍數  100
 a+b是5的倍數  80

輸出1個整數為 對獎後的最高獎金

輸入範例:
11 11 12
16 16 10
58 67 11
12 13 16
輸出範例:
600
500
200
180

x031參考解答
// x031
#include <iostream>
using namespace std;
int main()
{
  int a,b,c ,d,e;
  cin >> a >> b >> c;
  if( c%3==0 )
  {
     d = a%10;
     e = b%10;     
  }
  else if( c%2==0 )
  {
     d = a/10;
     e = b/10;       
  }
  else
  {
     d = a/10 + a%10;  
     e = b/10 + b%10;        
  }
  if(d>e) cout << "A\n";
  else if(d<e) cout << "B\n";
  else cout << "C\n";
  system("pause");
  return 0;
}
/*
58 67 12
58 67 10
58 67 11

-----
A
B
C

*/

x032參考解答
// x032
#include <iostream>
using namespace std;
int main()
{
  int a,b,c ,d,e=0;  // d可對獎個數, e已對獎個數
  cin >> a >> b >> c;
  if( c%3==0 ) d=3;
  else if( c%2==0 ) d=2;
  else d=1;
 
  int g=0;  //獎金
  if(a==b)
  {
     g+=300;       
     ++e;
  }
  if(e<d && a%3!=0)
  {
     g+=200;
     ++e;
  }
  if(e<d && b%2!=0)
  {
     g+=100;       
     ++e;
  }
  if( e<d && (a+b)%5==0 )
     g+=80;       

  cout << g << endl;
  system("pause");
  return 0;
}
/*
11 11 12
16 16 10
58 67 11
12 13 16

-----
600
500
200
180
*/


2016年1月10日 星期日

NPSC2015-J2G-morse 國中決 G.光通訊

/*
npsc2015-j2g-morse
sol-1 every char check
*/

#include <iostream>
#include <sstream>
#include <iomanip>
#include <cstring>
#include <cstdio>
#include <vector>
#include <map>
#include <algorithm>

using namespace std;
const int MaxN = 1000;
int mos[]={12,2111,2121,211,1,  1121,221,1111,11,1222,  212,1211,22,21,222,   1221,2212,121,111,2,  112,1112,122,2112,2122, 2211};
//A  B    C    D   E    F   G    H   I   J      K   L   M  N   O      P   Q     R  S   T    U   V    W   X   Y     Z
char tbl[81];  // A=1+2*3=4 , B=2+1*3+1*9+1*27=41 , J=1+2*3+2*9+2*27;
int main(void)
{
int i,j,k , n;
int p[]={1,3,9,27};
int v,d,e,f;
string s;
// gen tbl
for(i=0; i<26; ++i)
{
k=mos[i];
f=v=0;
e=1000;
while(k>0)
{
j=k/e;
k%=e;
e/=10;
if(j>0) v+=(j*p[f++]);

}
tbl[v] = char(i+'A');
// cout <<char(i+'A') << v << endl;
}


while(cin >>n)  //cin >> n;
{
cin >> s;
v=d=e=f=0;
for(j=0; j<n; ++j)
{
if( s[j] == '.' )
{
++d;
if(e>0)
{
v+=p[f];
if(e==3) v+=p[f];
e=0;
}

}
else // ==
{
++e;
if(d==0) continue;
if(d==1) ++f;
else
{
cout << tbl[v]; //cout << v << " ";
if(d==7) cout << " ";
v=0;
f=0;
}
d=0;
}
}
// last char
if(d==1) ++f;
v+=p[f];
if(e==3) v+=p[f];
cout << tbl[v]<< endl;  // << v << endl;

}

return 0;
}
/*
69
===.=...=.===.===.=...=.=.=...===.=.===.=.......===.===.=...===.===.=
57
=.===...===.=.=.=...===.=.===.=...===.=.=...=...=.=.===.=
53
===.===.=...=.=.=.=...=.=...=.===.===.===...===.=.===
55
=.===.=.=...===.===...===.=...===.===.===...=.===.===.=
47
===.===.=.===...=.===.=...=.=.=...===...=.=.===
65
=.=.=.===...=.===.===...===.=.=.===...===.=.===.===...===.===.=.=

--------out
NPSC GG
ABCDEF
GHIJK
LMNOP
QRSTU
VWXYZ

*/