Codeup——问题 H: 部分A+B (15)
生活随笔
收集整理的這篇文章主要介紹了
Codeup——问题 H: 部分A+B (15)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
2019-03-31?17:52:04
?
問題 H: 部分A+B (15)
時間限制: 1 Sec??內存限制: 32 MB提交: 801??解決: 569
[提交][狀態][討論版][命題人:外部導入]
題目描述
正整數A的“DA(為1位整數)部分”定義為由A中所有DA組成的新整數PA。例如:給定A = 3862767,DA?= 6,則A的“6部分”PA是66,因為A中有2個6。
現給定A、DA、B、DB,請編寫程序計算PA?+ PB。
輸入
輸入在一行中依次給出A、DA、B、DB,中間以空格分隔,其中0 < A, B < 1010。輸出
在一行中輸出PA?+ PB的值。樣例輸入
3862767 6 13530293 3 3862767 1 13530293 8樣例輸出
399 0我的算法:
把數字當做字符串輸入,然后遍歷某一字符串s,統計每個數字出現的個數(有個技巧,就是利用數組的下標表示數字0-9) 比如:a[i]表示數字為i時出現的此時 (0<=i<=9) 也就是說該數組長度為10
有個易錯點是,我是將'6'以字符串形式輸入的,那么,在找'6'是否在前一個字符串中出現過時,應當變為s[0]-'0'來訪問,計數數組a[i]=>a[s[0]-'0']
代碼如下:(已經AC)
1 #include <iostream> 2 #include<cstring> 3 #include<sstream> 4 /* run this program using the console pauser or add your own getch, system("pause") or input loop */ 5 using namespace std; 6 #define ll long long 7 int cal_num1[10];//0-9數字 8 9 10 ll Add(int num1){ 11 ll n1=0; 12 13 while(cal_num1[num1]--){ 14 n1=n1*10+num1; 15 } 16 17 return n1; 18 19 } 20 21 void InitC(string s){ 22 memset(cal_num1,0,sizeof(cal_num1)); 23 for(int i=0;i<s.length();i++){ 24 cal_num1[s[i]-'0']++; 25 } 26 } 27 int main(int argc, char** argv) { 28 string s,s1,s2,s3; 29 while(cin>>s>>s1>>s2>>s3){ 30 31 InitC(s); 32 ll n1=Add(s1[0]-'0'); 33 34 InitC(s2); 35 ll n2=Add(s3[0]-'0'); 36 cout<<n1+n2<<endl; 37 38 } 39 return 0; 40 }
?
如果還有更簡單的做法,請指教.謝啦轉載于:https://www.cnblogs.com/industrial-fd-2019/p/10632315.html
總結
以上是生活随笔為你收集整理的Codeup——问题 H: 部分A+B (15)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【大数据】学习大数据前需要掌握的知识
- 下一篇: 【跃迁之路】【671天】程序员高效学习方