u031:字串中的阿拉伯數字
讀入一列字串「含數字、英文字母」請挑出數字並印出
範例輸入
|
範例輸出
|
說明
|
A23xyc56
|
2356
|
依序輸出數字2356
|
89fHK71d
|
8971
|
依序輸出數字8971
|
#include
<iostream>
using namespace std;
int main(void)
{
int i,j,k , n;
string s;
cin >> s;
n = s.size();
for( i=0; i<n; ++i )
{
char c = s[i];
if(c>='0' && c<='9')
cout << c ;
}
cout << endl;
return 0;
}
u032:字串中的隱藏算式
讀入一列字串「含數字、英文字母及1個運算符號{+或-或*}」請挑出數字並印出算式結果
{註:運算符號只有一個,且一定在兩組數字之間,左右兩組數字皆為正整數<10000
範例輸入
|
範例輸出
|
說明
|
A23x*yc56
|
1288
|
23*56 = 1288
|
89fH+K71d
|
160
|
89+71 = 160
|
#include
<iostream>
using namespace std;
int main(void)
{
int i,j,k , n;
string s;
cin
>> s ;
n = s.size();
for(i=0; i<n; ++i)
if(s[i]=='+' || s[i]=='-' || s[i]=='*' )
break;
k=i+1;
int a=0;
for( i=0; i<k-1; ++i )
{
char c = s[i];
if(c>='0' && c<='9') a = a*10+ c-'0';
}
int b=0;
for( i=k; i<n; ++i )
{
char c = s[i];
if(c>='0' && c<='9')
b = b*10+ c-'0';
}
char op = s[k-1];
if(op == '+' ) cout << a+b <<
endl;
else if(op == '-' ) cout << a-b
<< endl;
else if(op == '*' ) cout << a*b
<< endl;
system("pause");
return 0;
}
u033:判斷是否被7整除
讀入一列字串「只含數字」,但長度最多50位,請問該正整數是否可被7整除,是印Y、否印N
{註:將數字每3位分節,奇數節和(設為a)與偶數節和(設為b),若a,b的差可被7整除即為7的倍數}
{範例1: 4611686014132420609,a=4+686+132+609 = 1431 、 b=611+014+420 = 1045 ,1431-1045=386非7倍數}
{範例2: 200560490130,a=560+130 = 690 、 b=200+490 = 690 ,690-690= 0是7的倍數}
範例輸入
|
範例輸出
|
說明
|
4611686014132420609
|
N
|
如上
|
200560490130
|
Y
|
0是算是七的倍數
|
#include
<iostream>
#include
<cmath>
using namespace std;
int main(void)
{
int i,j,k , n;
string s;
cin
>> s ;
n = s.size();
int a=n%3 , b=1;
int odd=0 , even=0;
if(a>0) odd = s[0]-'0';
if(a>1) odd= odd*10 +s[1]-'0';
if(odd) b=0; //多的1位或兩位放在 odd , 接著放在 even
for(i=a; i<n; i+=3)
{
int num = 0;
for(
j=0; j<3; ++j )
num
= num*10 + ( s[i+j]-'0' );
if(b)
odd += num;
else
even += num;
b
= 1-b;
}
if(abs(odd-even)%7==0) cout << "Y" << endl;
else cout << "N" << endl;
system("pause");
return 0;
}
u034:阿華民國發票統一編號的驗證
讀入一列字串「只含數字、字母最長9位」,就是阿華民國發票統一編號,請檢查是否正確,是則印T、否則印F
檢查規則:
(一) 長度:共八位,全部為數字型態; (二) 計算公式:如下說明
1、各數字分別乘以 1,2,1,2,1,2,4,1;若相乘結果大於等於10將十位及個位數再相加,重複至只剩1位
2、以上八個乘積處理後的8個數字相加的和看是否可被10整除,是則是正確的編號。
範例輸入
|
範例輸出
|
說明
|
123456789
|
F
|
長度為8
|
a1234567
|
F
|
有非數字
|
12345675
|
T
|
1 + 4 + 3 + 8 + 5 + 3 + 1 + 5 =30 { 6x2=12=(1+2)=3 , 7x4=28(=>2+8=10)=>(1+0)}
|
#include
<iostream>
using namespace std;
int main()
{
int i,j,k , n;
string s;
cin >> s;
n = s.size();
int two[]
= {0,2,4,6,8,1,3,5,7,9}; // *2
int four[] = {0,4,8,3,7,2,6,1,5,9}; // *4
if( n!=8 ) //長度非 8 錯
cout << "F" <<
endl;
else
{
for(i=0; i<8; ++i) // 是否為數字
{
int c=s[i]-'0';
if(c<0 || c>9) break;
}
if( i<8 ) cout << "F"
<< endl; //非全為數字
else
{
//算檢查碼 sum
int sum = s[0]+s[2]+s[4]+s[7] - 4*int('0'); // * 1 的
for(i=1; i<6; i+=2) // *2 的
{
int c=s[i]-'0';
sum += two[c];
}
sum += four[ s[6]-'0' ]; // 第7位 * 4
if( sum%10==0 ) cout << "T" << endl;
else cout << "F" << endl;
}
}
system("pause");
return 0;
}
u035:中間選區
上次b005的熱門點播你點了沒,這次我們要調查中間的共有幾首,所有點播的曲號中
最高的次數a及最低的次數b,問點播次數為(a-1) ~ (b+1)之間共有幾首?
最高的次數a及最低的次數b,問點播次數為(a-1) ~ (b+1)之間共有幾首?
輸入一個正整數n {n<100},代表有n個點播曲號{1~999999999
},輸出一個正整數,
代表中間選區有幾首
代表中間選區有幾首
範例輸入
|
範例輸出
|
說明
|
8
1 1 1 1 2 3 3 3
|
1
|
a最高為4次,b最低為1次
中間2~3次的有1個
|
14
1 4 1 4 1 5 1 5 2 3 3 6 3 5
|
3
|
a最高為4次,b最低為1次
中間2~3次的有3個 {3,4,5}
{4兩次、5及3各三次}
|
#include
<iostream>
using namespace std;
int main()
{
int i,j,k,n;
int nam[100]
, cnt[100]={0};
int ai=0 ; // 有幾個不同的曲號
cin >> n;
for(i=0; i<n; ++i)
{
cin >> k;
for(j=0; j<ai; ++j) //是否出現過
if(
k == nam[j] ) break;
if(j==ai)
nam[ai++] = k;
cnt[j] += 1;
}
int a=cnt[0] , b=cnt[0];
for(j=1; j<ai; ++j)
{
if(cnt[j]>a) a=cnt[j];
if(cnt[j]<b) b=cnt[j];
}
int c=0;
for(j=0; j<ai; ++j)
if(cnt[j]>b && cnt[j]<a) ++c;
cout << c << endl;
system("pause");
return 0;
}
u036:第k個質數是?
讀入一個正整數k,k<50,輸出一個正整數為第k個質數
範例輸入
|
範例輸出
|
說明
|
1
|
2
|
第1~第5個質數是2,3,5,7,11
|
10
|
29
|
第6~10個質數是13,17,19,23,29
|
46
|
199
|
第46質數是199
|
#include
<iostream>
using namespace std;
int main()
{
int i,j,k;
int c[500];
for(i=0; i<500; ++i) c[i]=1; // 1質數、0非質數
c[0] = c[1] = 0; // 0 , 1 不算
int cnt = 0;
// 從 2 開始算的個數
cin >> k;
for( i=2; i<500; ++i)
{
if( c[i]==1 )
{
cnt++;
if( cnt == k ) break; //找到第 k 個, 其值為 i
for(j=i*i; j<500; j+=i) c[j]=0;
}
}
cout << i << endl;
system("pause");
return 0;
}
0 意見:
張貼留言