您好,登錄后才能下訂單哦!
繼續刷水題!!!
這次要搞zoj的題目,Let's go!
Quicksum
http://acm.zju.edu.cn/網上第 2812 題
Quicksum 是一行字符串(數據包)中每個字符的位置與該字符的值的乘積之和。空格
的值是 0,字母的值等于它在字母表中的位置。所以,A 的值是 1,B 的值是 2,依此類推,
Z 的值是 26。下面兩個例子是求“ACM”和“MID CENTRAL”的 Quicksum:
ACM: 1*1 + 2*3 + 3*13 = 46
MID CENTRAL: 1*13 + 2*9 + 3*4 + 4*0 + 5*3 + 6*5 + 7*14 + 8*20 + 9*18 + 10*1 +
11*12 = 650
思路:用getline全部讀進來,然后挨個處理就可以了。
C++實現(注意ifstream cin("aaa.txt");是在調試的時候才用的,提交代碼的時候需要注釋掉):
#include <iostream> #include <fstream> using namespace std; int main() { ifstream cin("aaa.txt"); char ch[256]; int i = 1; int sum = 0; while (cin.getline(ch,256)) { if(ch[0] == '#') break; for(int i = 0;ch[i] != '\0';i++) { if(ch[i] != ' ') sum = sum+(i+1)*(ch[i]-64); } cout<<sum<<endl; sum = 0; } return 0; }
http://acm.zju.edu.cn/網上第 2478 題
把一個字符串中連續重復的字母從左到右寫成 kX 的形式,如果 k 是 1,那么,1 就要省略。
Sample Input
2
ABC
ABBCCC
Sample Output
ABC
A2B3C
思路:不斷讀取,不斷判斷是否與上一個字母相同,根據結果輸出。
C++實現:
#include <iostream> #include <fstream> using namespace std; int main() { //ifstream cin("aaa.txt"); string s,t; int n; cin >> n; for(int i=0;i<n;i++) { cin>>s; int c = 0; t = s[0]; int tmp = 0; for(int j=0;j<s.size();j++) { //When current letter equal last letter if(s[j]==t[0]) { tmp++; //When comes to the end of s if(j == s.size()-1) { if(tmp==1) cout << t[0]; else cout<<tmp<<t[0]; } } //When current letter do not equal last letter else { if(tmp==1) cout<<t[0]; else cout<<tmp<<t[0]; t[0] = s[j]; tmp = 1; if(j==s.size()-1) { if(tmp==1) cout<<t[0]; else cout<<tmp<<t[0]; } } } cout<<endl; s = ""; } return 0; }
Abbreviation
http://acm.zju.edu.cn/網上第 2947 題
比較兩個縮寫詞是否相同,而縮寫詞又是從一個包含多個單詞的名字中合成的。
每次讀入一個單詞,然后取出它的第一個字母,連接在字符串上,就組成了一個縮寫詞。
Sample Input
3
4
Super Harddisc Drive Cooler
4
Spade Heart Diamond Club
3
Shen Guang Hao
3
Shuai Ge Hao
3
Cai Piao Ge
4
C P C S
Sample Output
SAME
SAME
DIFFERENT
思路:挨個讀取單詞,將首字母存在string中,最后進行比較。
C++實現:
#include <iostream> #include <fstream> #include <string> using namespace std; int main() { ifstream cin("aaa.txt"); string s,ssa,ssb; int t,n,m; cin>>t; for(int i=0;i<t;i++) { cin>>n; for(int j=0;j<n;j++) { cin>>s; ssa = ssa + s[0]; } cin>>m; for(int k=0;k<m;k++) { cin>>s; ssb = ssb+s[0]; } if(ssa.compare(ssb)==0) printf("SAME\n"); else printf("DIFFERENT\n"); ssa = ""; ssb = ""; } return 0; }
Image Transformation
http://acm.zju.edu.cn/網上第 2857 題
把 RGB 圖像轉換為灰度圖像的一
種最簡便的方法是:把一個像素的紅、綠和藍的值都設置為一個相同的值(即(r+g+b)/3,
這里假定(r+g+b)總能被 3 整除)。
你決定編寫一個程序來測試這種方法的有效性。
思路:統計每個通道的值,除以像素的個數。
C++實現:
#include <iostream> #include <fstream> #include <string> #include <vector> using namespace std; int main() { //ifstream cin("aaa.txt"); vector<int> r; vector<int> g; vector<int> b; int n,m; int rr,gg,bb; int w = 0; while(cin>>n>>m) { r.clear(); g.clear(); b.clear(); w++; if(n==0 && m==0) break; for(int i=0;i<n*m;i++) { cin>>rr; r.push_back(rr); } for(int j=0;j<n*m;j++) { cin>>gg; g.push_back(gg); } for(int k=0;k<n*m;k++) { cin>>bb; b.push_back(bb); } cout<<"Case "<<w<<":"<<endl; for(int p=0;p<n*m;p++) { cout<<(r[p]+g[p]+b[p])/3; if((p+1)%m==0) cout<<endl; else cout<<","; } } return 0; }
Error Correction
http://acm.zju.edu.cn/網上第 1949 題
一個布爾矩陣有一種奇偶性,即該矩陣所有行和所有列的和都是一個偶數。
編寫一個程序,讀入這個矩陣并檢查它是否具有奇偶性。如果沒有,你的程序應當再檢查一下它是否可以通過修改一位(把 0 修改為 1,把 1 修改為 0)來使它具有奇偶性。如果不可能,這個矩陣就被認為是破壞了。
思路:統計矩陣中行和列中1的個數,判斷是否為偶數。
都為偶數的話,說明有奇偶性,否則再判斷,當只有一行的和是奇數且只有一列的和為奇數,那么,將這兩行交點處的元素修改一下,就變成具有 parity property(奇偶性)的矩陣了。這里還要清楚的一點是,在一個矩陣中,任何一行與任何一列都有且僅有一個交點。
C++實現:
#include <iostream> #include <fstream> #include <string> #include <vector> using namespace std; int matrix[100][100]; int SL[100]; int SC[100]; int main() { ifstream cin("aaa.txt"); int i,j,PL,PC,CountL,CountC; int n; while(cin>>n) { if(n==0) break; PL = 0; PC = 0; CountL = 0; CountC = 0; for(i=0;i<n;i++) { SL[i] = 0; SC[i] = 0; } for(i=0;i<n;i++) { for(j=0;j<n;j++) { cin>>matrix[i][j]; SL[i]=SL[i]+matrix[i][j]; SC[j]=SC[j]+matrix[i][j]; } } for(i=0;i<n;i++) { if(SL[i]%2!=0) { PL=i;//Record the row CountL++; } if(SC[i]%2!=0) { PC=i;//Record the line CountC++; } } //Output result if(CountL == 0&&CountC==0) cout<<"OK"<<endl; else if(CountL==1 && CountC==1) cout<<"Change bit ("<<PL+1<<","<<PC+1<<")"<<endl; else cout<<"Corrupt"<<endl; } return 0; }
打完收工,故事還在繼續。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。