第一题:long loong
#include<stdio.h> int main(){ int N; scanf("%d",&N); printf("L"); for(int i=0;i<N;i++){ printf("o"); } printf("ng"); return 0; }
思路:要求输入有N个o的字符串long,先输入一个整数N,然后输出"L",用for循环输出N个o,最后输出ng
第二题:
`#include <stdio.h>
include <ctype.h>
include <string.h>
int main() {
int N;
scanf("%d", &N);
char a[100];
for (int i = 0; i < N; i++) {
scanf("%s", a);
for (int j = 0; a[j] != '\0'; j++) {
a[j] = toupper(a[j]);
}
if (strcmp(a, "YES") == 0) {
printf("YES\n");
} else {
printf("NO\n");
}
}
return 0;
}
思路:要求判断字符串是否等于“YES”,首先输入要判断的字符串个数,再定义一个字符数组,遍历数组输入字符,为方便判断,统一转换为大写字母,用toupper函数实现,然后用if语句判断字符串并输出结果 第三题:
#include<stdio.h>
include<string.h>
int main(){
char a[61];
int N;
scanf("%d",&N);
for(int i=0;i<N;i++){
scanf("%s",a);
int l=strlen(a);
int x=((int)a[l-1])-48;
if(x%2==0){
printf("even\n");
}
else{
printf("odd\n");
}
}
return 0;
}思路:第一次做的时候没有考虑到数字的大小,直接用int型定义了导致错误,更正后如下:定义一个整型数组,输入要判断的数的个数N,输入要判断的整数,用strlen取整数的长度,由于判断整数的奇偶可以只看个位,所以我直接取个位数来判断,用if语句判断并输出结果 第四题:
#include <stdio.h>
include <string.h>
int main() {
int t, n, m;
scanf("%d", &t);
while (t--) {scanf("%d %d", &n, &m); char a[51]; scanf("%s", a);int count[7] = {0}; for (int i = 0; i < n; i++) {count[a[i] - 'A']++; }int needed = 0; for (int i = 0; i < 7; i++) { if (count[i] < m) { needed += m - count[i];}}printf("%d\n", needed);
}return 0;
}
`
思路:输入测试用例的数量t,输入轮数m和题数n,然后输入字符串a,定义一个大小为 7 的数组count,用于统计字符串中每个字符的出现次数,最后计算需要出的额外题目数,当出现次数小于轮数时,需要额外出题,最后输出需要出的额外题目数
第五题:
include
include
using namespace std;
int main() {
int n, m, k;
cin >> n >> m >> k;
vector<vector
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
cin >> records[i][j];
}
}
int days= 0; for (int i = 0; i < m; i++) { int count_k = 0; for (int j = 0; j < n; j++) { if (records[i][j] == k) {count_k++;}}if (count_k >= (n + 1) / 2) { days++;}
}if (days >= (m + 1) / 2) { cout << "YES" << endl;
} else {cout << "NO" << endl;
}return 0;
}
思路:定义一个二维数组records,用于存储输入的数据,通过嵌套循环读取矩阵中的每个元素,存储到 records 中,在每一行中,用变量 count_k 统计目标值 k 的出现次数,如果在某一行中,k 的出现次数大于或等于该行元素总数的一半((n + 1) / 2),则将 days 的值加 1,最后用if语句判断并输出结果
第六题:
`#include<bits/stdc++.h>
using namespace std;
int main(){
int n;
cin>>n;
string s;
cin>>s;
int q;
cin>>q;
char ch1,ch2;
char k[27],m[27];
for(int i=0;i<27;i++){
k[i]='a'+i;
m[i]='a'+i;
}
for(int i=0;i<q;i++){
cin>>ch1>>ch2;
for(int j=0;j<27;j++){
if(k[j]ch1){
k[j]=ch2;
}
}
}
for(int i=0;i<n;i++){
for(int j=0;j<27;j++){
if(s[i]m[j]){
s[i]=k[j];
break;
}
}
}
cout<<s;
return 0;
}`
思路:这题一开始不会,听完讲评之后理解一些了,程序的目标是:读取一个字符串 s 和一组字符替换规则。根据这些规则,将字符串中的字符逐个替换。输出最终替换后的字符串。n是字符串的长度,s是需要进行字符替换的原始字符串,q是替换规则的数量。ch1 和 ch2 用于存储每条替换规则中的字符。k 和 m 是两个大小为 27 的字符数组,用于存储替换规则和原始字符映射。k用于存储最终的字符映射关系。m用于存储原始字符('a' 到 'z',加上一个额外的字符,总共 27 个)。循环读取 q 条替换规则,每条规则包含两个字符 ch1 和 ch2。对于每条规则,遍历数组 k,将所有等于 ch1 的字符替换为 ch2。循环读取 q 条替换规则,每条规则包含两个字符 ch1 和 ch2。对于每条规则,遍历数组 k,将所有等于 ch1 的字符替换为 ch2,最后输出最终替换后的字符串。
第七题:
`#include
using namespace std;
int num[1005][1005];
int main()
{
int x,y,op,n,m;
cin>>x>>y;
for(int i=1;i<=x;i++){
for(int j=1;j<=x;j++){
cin>>num[i][j];
}
}
int h[1005],l[1005];
for(int i=1;i<=1005;i++){
h[i]=i;
l[i]=i;
}
while(y--){
cin>>op>>n>>m;
switch(op){
case 0:{
int temp=l[n];
l[n]=l[m];
l[m]=temp;
break;}case 1:{int temp=h[n];h[n]=h[m];h[m]=temp;break;}}
}
for(int i=1;i<=x;i++){for(int j=1;j<=x;j++){cout<<num[h[i]][l[j]]<<" ";}cout<<endl;
}
return 0;
}`
思路:一开始用常规思路做然后超时了,跟同学讨论之后借鉴了同学的思路,以行或列为单位交换,缩短运行时间
学习总结:刚接触c++,还不太会用,前面一些题目用的还是c语言,另外在解题思路上还有些死板,通过这一专题的学习有了一些启发,后续学习中将会继续认真学习c++语法以及解题思路。