一、第一题
代码:
#include<iostream>
using namespace std;
#include<string>
int main()
{
int n;
cin>>n;
string s(n,'o');
cout<<'L'<<s<<"ng";
return 0;
}
思路:通过字符串s实现‘o’的n次复制,然后输出
二、第二题
代码:
#include<iostream>
using namespace std;
#include<string>
int main()
{
int n,i,len;
cin>>n;
string s;
for(i=0;i<n;i++)
{
cin>>s;
for(auto& ch :s)
ch=toupper(ch);
if(s=="YES")
cout<<"yes\n";
else
cout<<"no\n";
}
return 0;
}
思路:输入字符串后,用toupper函数实现所有字母的大写转化,来以此跟“YES”进行比较,判断是否符合任意大小写的yes
三、第三题
代码:
#include<iostream>
#include<string.h>
using namespace std;
int main()
{
int n,i,len;
cin>>n;
char s[65];
for(i=0;i<n;i++)
{
cin>>s;
len=strlen(s);
if((s[len-1]-'0')%2!=0)
cout<<"odd\n";
else
cout<<"even\n";
}
return 0;
}
思路:用数组s存储数字,可以避免范围不足问题,通过strlen函数测量出数组长度后,可以直接访问该数字的个位数字,通过个位数字的奇偶判断整个数的奇偶性
四、第四题
代码:
#include<iostream>
#include<string.h>
using namespace std;
int main()
{
int n,t,m,i,j;
cin>>t;
char s[51]={'\0'};
for(i=0;i<t;i++)
{
int a[7]={0},sum=0;
cin>>n>>m;
cin>>s;
for(j=0;j<n;j++)
a[s[j]-'A']++;
for(j=0;j<7;j++)
{
if(a[j]<m)
sum+=m-a[j];
}
cout<<sum<<endl;
}
return 0;
}
思路:用数组a来存储七个字母在字符串中分别出现的次数,通过与m的比较,若不足m次就要将其加进需要想的问题数量sum中,最后的sum就是题目所求
五、第五题
代码:
#include<iostream>
using namespace std;
int main()
{
int n,m,k,i,j,a;
float sum1,sum2=0;
cin>>n>>m>>k;
for(i=0;i<m;i++)
{
sum1=0;
for(j=0;j<n;j++)
{
cin>>a;
if(a==k)
sum1++;
}
if(sum1>=n*1.0/2)
sum2++;
}
if(sum2>=m*1.0/2)
cout<<"YES";
else
cout<<"NO";
return 0;
}
思路:sum1代表一天里遵守规则k的人,sum2代表规则k符合民意的天数,若sum1值大于等于人数的一半,该规则符合民意,sum2++,若sum2值大于等于总天数的一半,规则k就是正确的,输出YES,反之输出NO
六、第六题
代码:
#include<iostream>
#include<string>
using namespace std;
int main()
{
int n, q, i, j;
string s;
char c, d,table[26];
cin >> n >> s >> q;
for (i = 0; i < 26; i++)
table[i] = 'a' + i;
for (i = 0; i < q; i++)
{
cin >> c >> d;
if (c == d)
continue;
for(j=0;j<26;j++)
if(table[j]==c)
table[j] = d;
}
for (char& ch : s)
ch = table[ch - 'a'];
cout << s;
return 0;
}
思路:table数组存的是26个字母,将字符变动的操作作用在字母表上,可以直观反映每个字母的变化,若字母与c相等,就将其置换成d,每个字母变换过后,就可以运用到字符串中,使字符串的每个字母也进行相应的变化,一次到位
七、第七题
代码:
#include<iostream>
#include<vector>
#define N 1001
using namespace std;
int main()
{
int n, m, i, j, op, x, y,l,row[N],line[N];
cin >> n >> m;
vector<vector<int> > chart(N, vector<int>(N));
for (i = 0; i < n; i++)
for (j = 0; j < n; j++)
cin >> chart[i][j];
for (i = 0; i < n; i++)
row[i] = line[i] = i;
for (l = 0; l < m; l++)
{
cin >> op >> x >> y;
if (x == y)
continue;
if (op == 0)
swap(row[x - 1], row[y - 1]);
else
swap(line[x - 1], line[y - 1]);
}
for (i = 0; i < n; i++)
for (j = 0; j < n; j++)
{
cout << chart[line[i]][row[j]]<<' ';
if (j == n - 1)
cout << endl;
}
return 0;
}
思路:用vector动态数组chart将方阵存下,而后用row和line数组标记每行每列,如同建立坐标系一般,而后通过用swap函数对行列的交换操作侧面反映方阵的操作,既直观又节省时间,然后以类似坐标的形式将操作后的方阵输出
学习总结:首次接触c++,并用c++编写程序,对我造成了一定的困难,好在跟c语言的类似性,代码逐步走上正轨;做题的过程中,我深深感受到了思维不能被限制的重要性,在hard难度下的两道题,最开始自己做总是超时,对优化也毫无头绪,在他人以及评讲的帮助下,我才幡然醒悟,有时候顺着题目走反而会走入死胡同,将思维跳脱可能才能看到正确的道路。
标签:std,专题,int,cin,acm,++,using,include From: https://www.cnblogs.com/astronomyyy/p/18687708