#include<iostream>usingnamespace std;constint N =1010;double a[N], b[N], c[N];intmain(){int k;cin >> k;while(k --){int ex;double co;cin >> ex >> co;a[ex]= co;}cin >> k;while(k --){int ex;double co;cin >> ex >> co;b[ex]= co;}for(int i =0; i < N; i ++) c[i]= a[i]+ b[i];k =0;for(int i =0; i < N; i ++)if(c[i])k ++;cout << k;for(int i = N -1; i >=0; i --)if(c[i])printf(" %d %.1lf", i, c[i]);return0;}
1009 Product of Polynomials (25 分)
題意 :給兩個多項式,輸出兩個多項式相乘結果的系數和次數
語法 :使用函數化解這個不同的容器相同操作的尷尬;正確認知數組實際應有的容量,盡量開大
#include<iostream>usingnamespace std;constint N =1010, M = N *2;double a[N], b[N], c[M];voidinput(double a[]){int k;cin >> k;while(k --){int n;double v;cin >> n >> v;a[n]= v;}}intmain(){input(a);input(b);for(int i =0; i < N; i ++)for(int j =0; j < N; j ++)c[i + j]+= a[i]* b[j];int k =0;for(int i =0; i < M; i ++)if(c[i])k ++;cout << k;for(int i = M -1; i >=0; i --)if(c[i])printf(" %d %.1lf", i, c[i]);return0;}
#include<iostream>#include<vector>#include<algorithm>usingnamespace std;intmain(){string A;vector<int> a;cin >> A;for(int i = A.size()-1; i >=0; i --) a.push_back(A[i]-'0');vector<int> b;int t =0;for(int i =0; i < a.size(); i ++){int s = a[i]+ a[i]+ t;b.push_back(s %10);t = s /10;}if(t) b.push_back(1);vector<int> c = b;sort(c.begin(), c.end());sort(a.begin(), a.end());if(a == c)puts("Yes");elseputs("No");for(int i = b.size()-1; i >=0; i --) cout << b[i];return0;}
#include<iostream>#include<vector>usingnamespace std;boolcheck(vector<int>& n){for(int i =0, j = n.size()-1; i < j; i ++, j --)if(n[i]!= n[j])returnfalse;returntrue;}vector<int>add(vector<int>& a, vector<int>& b){vector<int> c;for(int i =0, t =0; i < a.size()|| i < b.size()|| t; i ++){int s = t;if(i < a.size()) s += a[i];if(i < b.size()) s += b[i];c.push_back(s %10);t = s /10;}return c;}intmain(){string n;int k;cin >> n >> k;vector<int> a;for(int i = n.size()-1; i >=0; i --) a.push_back(n[i]-'0');int cnt =0;if(!check(a)){while(cnt < k){vector<int>b(a.rbegin(), a.rend());a =add(a, b);cnt ++;if(check(a))break;}}for(int i = a.size()-1; i >=0; i --) cout << a[i];cout << endl << cnt << endl;}
1058 A+B in Hogwarts (20 分)
題意 :A和B分別用轉換后的形式給出,求轉換后形式的A+B,題目保證所給的是化簡后的轉換后形式
思路 :實則就是進位制的操作,不用if特判
語法 :scanf和printf的妙用
#include<iostream>usingnamespace std;intmain(){int a, b, c, d, e, f;scanf("%d.%d.%d %d.%d.%d",&a,&b,&c,&d,&e,&f);a += d, b += e, c += f;b += c /29, c %=29;a += b /17, b %=17;printf("%d.%d.%d", a, b, c);return0;}
#include<iostream>#include<vector>usingnamespace std;boolcheck(vector<int> A){for(int i =0, j = A.size()-1; i < j; i ++, j --)if(A[i]!= A[j])returnfalse;returntrue;}voidprint(vector<int> A){for(int i = A.size()-1; i >=0; i --)cout << A[i];}vector<int>add(vector<int> A, vector<int> B){vector<int> C;for(int i =0, t =0; i < A.size()|| i < B.size()|| t; i ++){if(i < A.size()) t += A[i];if(i < B.size()) t += B[i];C.push_back(t %10);t /=10;}return C;}intmain(){string a;cin >> a;vector<int> A;for(int i =0; i < a.size(); i ++) A.push_back(a[a.size()-1- i]-'0');for(int i =0; i <10; i ++){if(check(A))break;vector<int>B(A.rbegin(), A.rend());print(A), cout <<" + ",print(B), cout <<" = ";A =add(A, B);print(A), cout << endl;}if(check(A))print(A), cout <<" is a palindromic number.";else cout <<"Not found in 10 iterations.";return0;}