标签:
这一系列的练习主要在Virtual Judge上进行,题目为小白书上的题目推荐。
注意两个数的大小关系,水题。
#include <iostream>
using namespace std;
int main()
{
long long x, y;
while(cin >> x >> y)
{
if(x > y) { swap(x, y); }
cout << y - x << endl;
}
return 0;
}
水题。
#include <iostream>
using namespace std;
int main()
{
int x, y;
while(cin >> x >> y)
{ cout << x * y * 2 << endl; }
return 0;
}
根据题目描述推导公式,水题。
#include <iostream>
using namespace std;
int main()
{
int T, N, x, y, z;
cin >> T;
for(int i = 1; i <= T; i++)
{
int ans = 0;
cin >> N;
for(int j = 1; j <= N; j++)
{
cin >> x >> y >> z;
ans += x * z;
}
cout << ans << endl;
}
}
凯撒密码,水题。
#include <iostream>
#include <string>
using namespace std;
int main()
{
string x;
while(getline(cin, x))
{
for(int i = 0; i < x.length(); i++)
{ cout << (char)(x[i] - 7); }
cout << endl;
}
return 0;
}
一开始想通过计算空格数来计算单词个数,后来发现不行,只好使用原始的模拟方法。水题。
#include <iostream>
#include <string>
using namespace std;
int main()
{
string x, y;
while(getline(cin, x))
{
y = "";
int ans = 0;
for(int i = 0; i < x.length(); i++)
{
if(x[i] >= ‘A‘ && x[i] <= ‘Z‘ ||
x[i] >= ‘a‘ && x[i] <= ‘z‘)
{ y += x[i]; }
else
{
if(y != "") { ans++; y = ""; }
}
}
cout << ans << endl;
}
return 0;
}
英语不好,题目看了半天,找了翻译,才看懂题目。看懂以后直接公式就出来了。水题。
#include <iostream>
#include <string>
using namespace std;
int main()
{
int N;
string x;
while(cin >> N)
{
cin.get();
if(!N) { break; }
int nTotal = 0, nMin = 2147483647;
for(int i = 1; i <= N; i++)
{
int nTmp = 0;
getline(cin, x);
for(int j = 0; j < x.length(); j++)
{
if(x[j] == ‘ ‘) { nTmp++; }
}
nTotal += nTmp;
nMin = min(nMin, nTmp);
}
cout << nTotal - nMin * N << endl;
}
return 0;
}
这个处理要注意没有字符的时候输出空格,否则会PE。水题。
#include <iostream>
#include <string>
using namespace std;
const int MAX = 128;
string strTmp[MAX];
int main()
{
int nPos = 0, nLen = 0;
while(getline(cin, strTmp[++nPos]))
{ nLen = max(nLen, (int)strTmp[nPos].length()); }
for(int j = 0; j < nLen; j++)
{
for(int i = nPos - 1; i >= 1; i--)
{
if(j < strTmp[i].length())
{ cout << strTmp[i][j]; }
else
{ cout << " "; }
}
cout << endl;
}
return 0;
}
int max(int x, int y)
{ return x > y ? x : y; }
朴素的字符串处理题,注意换行的处理。水题。
#include <iostream>
#include <string>
using namespace std;
string x;
int main()
{
while(getline(cin, x))
{
int nPos = 0;
while(nPos < x.length())
{
int nCnt = 0;
if(x[nPos] == ‘!‘) { cout << endl; }
while(x[nPos] >= ‘0‘ && x[nPos] <= ‘9‘)
{
nCnt += x[nPos] - ‘0‘;
nPos++;
}
for(int i = 1; i <= nCnt; i++)
{
if(x[nPos] == ‘b‘) { cout << " "; }
else { cout << x[nPos]; }
}
nPos++;
}
cout << endl;
}
return 0;
}
水题。
#include <iostream>
using namespace std;
void Tri(int x);
int main()
{
int T, N, M;
cin >> T;
for(int i = 1; i <= T; i++)
{
cin >> N >> M;
for(int j = 1; j <= M; j++)
{
Tri(N);
if(j != M) { cout << endl; }
}
if(i != T) { cout << endl; }
}
}
void Tri(int x)
{
for(int i = 1; i <= x - 1; i++)
{
for(int j = 1; j <= i; j++)
{ cout << i; }
cout << endl;
}
for(int i = 1; i <= x; i++)
{ cout << x; }
cout << endl;
for(int i = x - 1; i >= 1; i--)
{
for(int j = i; j >= 1; j--)
{ cout << i; }
cout << endl;
}
}
还是英语不好,百度了游戏规则才看懂了题目。看懂以后就是水题了。
#include <iostream>
#include <string>
#include <memory.h>
using namespace std;
const int MAX = 32;
bool pVisited[MAX];
int main()
{
int N;
string x, y;
while(cin >> N)
{
if(N == -1) { break; }
bool bFlag = true;
int nCnt = 0, nTmp = 0, nWrong = 0;
memset(pVisited, false, sizeof(pVisited));
cout << "Round " << N << endl;
cin >> x >> y;
for(int i = 0; i < x.length(); i++)
{
if(!pVisited[x[i] - ‘a‘])
{
pVisited[x[i] - ‘a‘] = true;
nCnt++;
}
}
for(int i = 0; i < y.length(); i++)
{
if(pVisited[y[i] - ‘a‘])
{
pVisited[y[i] - ‘a‘] = false;
nTmp++;
}
else { nWrong++; }
if(nTmp == nCnt && nWrong < 7) { bFlag = true; break; }
if(nTmp != nCnt && nWrong >= 7) { bFlag = false; break; }
}
if(bFlag)
{
if(nTmp == nCnt) { cout << "You win." << endl; }
else { cout << "You chickened out." << endl; }
}
else { cout << "You lose." << endl; }
}
return 0;
}
又是3n + 1问题,一开始总是TLE,位运算以后还是TLE,后来发现用了int,中间值会溢出,所以表面上是TLE,实际上已经WA了。或许这就是TLE有可能是WA的一个很好的例子吧。
#include <stdio.h>
int main()
{
long long A, L, nCase = 0;
while(scanf("%lld%lld", &A, &L) != EOF)
{
if(A == -1 && L == -1) { break; }
printf("Case %lld: A = %lld, limit = %lld, number of terms = ", ++nCase, A, L);
long long nCnt = 0;
while(A <= L)
{
nCnt++;
if(A == 1) { break; }
if(A & 1) { A = 3 * A + 1; }
else { A >>= 1; }
}
printf("%lld\n", nCnt);
}
return 0;
}
感觉像模拟细胞生命的游戏,模拟即可,水题。
#include <iostream>
#include <memory.h>
using namespace std;
const int MAX = 64;
int pData[MAX], pDish[MAX][2];
int main()
{
int T;
cin >> T;
for(int i = 1; i <= T; i++)
{
memset(pDish, 0, sizeof(pDish));
pDish[20][0] = 1;
for(int j = 0; j < 10; j++)
{ cin >> pData[j]; }
for(int j = 1; j <= 50; j++)
{
for(int k = 1; k <= 40; k++)
{
if(pDish[k][0] == 0) { cout << " "; }
if(pDish[k][0] == 1) { cout << "."; }
if(pDish[k][0] == 2) { cout << "x"; }
if(pDish[k][0] == 3) { cout << "W"; }
}
for(int k = 1; k <= 40; k++)
{
int nCnt = pDish[k - 1][0] + pDish[k][0] + pDish[k + 1][0];
pDish[k][1] = pData[nCnt];
}
for(int k = 1; k <= 40; k++)
{ pDish[k][0] = pDish[k][1]; }
cout << endl;
}
if(i != T) { cout << endl; }
}
return 0;
}
总结一下,刷了12道水题,发现比sgu简单多了,就这样穿插着刷一刷小白书吧。
标签:
原文地址:http://www.cnblogs.com/Ivy-End/p/4277692.html