1057 数零壹 (20 分)
生活随笔
收集整理的這篇文章主要介紹了
1057 数零壹 (20 分)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
給定一串長度不超過?10?5???的字符串,本題要求你將其中所有英文字母的序號(字母 a-z 對應序號 1-26,不分大小寫)相加,得到整數 N,然后再分析一下 N 的二進制表示中有多少 0、多少 1。例如給定字符串?PAT (Basic),其字母序號之和為:16+1+20+2+1+19+9+3=71,而 71 的二進制是 1000111,即有 3 個 0、4 個 1。
輸入格式:
輸入在一行中給出長度不超過?10?5??、以回車結束的字符串。
輸出格式:
在一行中先后輸出 0 的個數和 1 的個數,其間以空格分隔。
輸入樣例:
PAT (Basic)輸出樣例:
3 4 #include<cstdio> #include<iostream> #include<cstring> using namespace std; const int maxn = 100010; char str[maxn];int getSum(char s[]){int len = strlen(s);int sum = 0;for(int i = 0; i < len; i++){if(s[i] >= 'a' && s[i] <= 'z') sum += s[i] - 'a' + 1;if(s[i] >= 'A' && s[i] <= 'Z') sum += s[i] - 'A' + 1;}return sum; }void count(int n){int cnt1 = 0,cnt0 = 0;while(n) //如果用do while循環則會出現第三個測試點不過。存疑 {if(n%2==0)cnt0++;else cnt1++;n/=2;}printf("%d %d",cnt0,cnt1); }int main(){//fgets(str,maxn,stdin);//getline(cin,str); cin.getline(str,maxn); int sum = getSum(str);count(sum);return 0; } //網上看到的,這個輸入模式我比較陌生。侵刪 #include<cstdio> int main(){char ch;int sum = 0;while((ch = getchar()) != '\n'){if(ch >= 'a' && ch <= 'z') sum += ch - 'a' + 1;if(ch >= 'A' && ch <= 'Z') sum += ch - 'A' + 1;}int zero = 0,one = 0;while(sum){if(sum % 2 == 0) zero++;else one++;}printf("%d %d",zero,one);return 0; }?
轉載于:https://www.cnblogs.com/wanghao-boke/p/10395224.html
總結
以上是生活随笔為你收集整理的1057 数零壹 (20 分)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 1052 卖个萌 (20 分)
- 下一篇: LOL迅捷斥候怎么学了E技能怎么不能用啊