easy 1:
#include <iostream>
using namespace std;
int main()
{
int n;
cin >> n;
cout << 'L';
while (n)
{
cout << 'o';
n--;
}
cout << "ng";
return 0;
}
这道题比较简单,简单考察循环的使用。
easy 2:
#include <iostream>
using namespace std;
int main()
{
int n;
cin >> n;
while (n)
{
string s;
cin >> s;
if ((s[0] == 'Y' || s[0] == 'y') && (s[1] == 'E' || s[1] == 'e') && (s[2] == 's' || s[2] == 'S')) cout << "YES" << endl;
else cout << "NO" << endl;
n--;
}
return 0;
}
easy 3:
#include<iostream>
using namespace std;
int main()
{
int n;
cin>>n;
while(n)
{
char s[61];//题目所给的数值范围大,需要用字符储存
cin>>s;
if((s[strlen(s)-1]-'0)%2==0) cout<<"even"<<endl;//根据字符末尾数字是否为偶数判断奇偶性
else cout<<"odd"<<endl;
n--;
}
return 0;
}
注意常见的数据类型的范围:
int:-1e9,1e9
long long:-1e18,1e18
mid 1:
#include <iostream>
using namespace std;
int main()
{
int t;
cin >> t;
while (t)
{
int n, m,ans=0;//ans指最少需要再出几道题
int cnt[7] = { 0 };//cnt数组用于记录给出的A到G等级的题型分别多少道,便于查找不够的题数的
cin >> n >> m;
string s;
cin >> s;
for (int i = 0; i < n; i++) cnt[s[i]-'A']++;
for (auto i = 0; i <= 6; i++)
{
if (cnt[i] < m) ans += m - cnt[i];//遍历每道题型,计算出该道题型差的题数
}
cout << ans << endl;
t--;
}
return 0;
}
mid 2:
#include <iostream>
#include <vector>
using namespace std;
int main()
{
int n, m, k,p;
cin >> n>>m>>k;
vector<int> cnt(m);//分别储存每天有多少人遵守规则k
for(int i=0;i<m;i++)
for (int j = 0; j < n; j++)
{
cin >> p;
if (p == k) cnt[i]++;
}
int ans=0;//符合民意的天数
for (int i = 0; i < m; i++)
{
if (cnt[i] >= (n + 1) / 2) ans++;//规则符合民意
}
if (ans >= (m + 1) / 2) cout << "YES";//规则是否正确
else cout << "NO";
return 0;
}
注意:定义普通数组时,数组长度不可用变量名代替,而用vector储存数组时可以。
hard 1:
#include <iostream>
#include <vector>
using namespace std;
struct S
{
char k, b;
};//储存每次操作的具体信息
int main()
{
int n,q;
string s;
char f[26];//储存26个字母经过q次操作后对应的数字
cin >> n >> s >> q;
vector<S> v(q);//储存所有操作
for (int i = 0; i < q; i++)
{
cin >> v[i].k >> v[i].b;
}
char c;
for (auto ch = 'a'; ch <= 'z'; ch++)
{
c = ch;
for (int i = 0; i < q; i++)//通过q步改变每个字母
{
if (c == v[i].k) c = v[i].b;
}
f[ch - 'a'] = c;//赋值
}
for (int i = 0; i < s.size(); i++) cout << f[s[i] - 'a'];//通过f把对应的s中的字符一个个找出来
return 0;
}
注意:结构体储存每步操作,方便查找对应操作的字母和操作
hard 2:
#include <iostream>
#include <vector>
#include <cmath>
using namespace std;
const int N = 1e3 + 6;
int a[N][N], ans[N][N];//数组a储存原始数据表,ans储存最终的
int xx[N], yy[N];//分别对应行,列前的序号,便于直接查找原始数据表
int main()
{
int n,m;
cin >> n>>m;
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= n; j++)
cin >> a[i][j];
}
for (int i = 1; i <= n; i++) xx[i] = yy[i] = i;//给行列序号赋初始值
while (m)
{
int op, x, y;
cin >> op >> x >> y;
if (op) swap(xx[x], xx[y]);//op=1,交换行
else swap(yy[x], yy[y]);//op=2,交换列
m--;
}
for(int i=1;i<=n;i++)
for (int j = 1; j <= n; j++)
{
ans[i][j] = a[xx[i]][yy[j]];//ans分别对应a中数据
}
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= n; j++)
{
cout << ans[i][j]<<' ';
}
cout << endl;
}
return 0;
}
通过交换行列的序号达到交换行列的目的,从交换多个数字转化为每次交换两个数字,避免超时
7556

被折叠的 条评论
为什么被折叠?



