- 思路:用for循环控制o的个数
代码:#include<iostream>
using namespace std;
int main(){
int N=0;
cin>>N;
cout<<'L';
for(int i=0;i<N;i++){
cout<<'o';
}
cout<<"ng";
return 0;}
- 思路:将输入的字符串转化为大写再进行判断
代码:#include<iostream>
using namespace std;
#include<cctype>
#include<cstring>
int main(){
int n=0;
cin>>n;
char s[4];
const char s1[]={'Y','E','S','\0'};
for(int i=0;i<n;i++){
cin>>s;
for(int j=0;j<3;j++)
s[j]=toupper(s[j]);
if(!strcmp(s,s1))
cout<<"YES"<<endl;
else
cout<<"NO"<<endl;
}
return 0;
}
- 思路:用字符串输入数据,并以最后一位数的奇偶性判断整个数的奇偶性
代码:#include<iostream>
using namespace std;
#include<string>
int main()
{
int n;
cin>>n;
string s;
for(int i=0;i<n;i++)
{
cin>>s;
if(s.back()=='0'||s.back()=='2'||s.back()=='4'||s.back()=='6'||s.back()=='8')
cout<<"even"<<endl;
else
cout<<"odd"<<endl;
}
return 0;
}
Tips:数据过大时可以用字符串进行输入,并通过仔细分析题目化简过程,如本题判断奇偶性只需判断最后一位数的奇偶性即可
- 思路:先用sum=m*7算出总共需要多少字母,再写一个函数其功能是记录字符串各个字母出现的次数,再通过for循环计算每一轮已有的不同字母,再用总数减去每一轮已有的就是需要个数。
代码:#include<iostream>
using namespace std;
#include<string>
#include<vector>
vector<int> LEVEL(string a)
{
int len = a.size();
vector<int> level(7, 0);
for(int j=0;j<len;j++)
{
if(a[j]=='A')
level[0]++;
if(a[j]=='B')
level[1]++;
if(a[j]=='C')
level[2]++;
if(a[j]=='D')
level[3]++;
if(a[j]=='E')
level[4]++;
if(a[j]=='F')
level[5]++;
if(a[j]=='G')
level[6]++;
}
return level;
}
int main()
{
int t;
cin>>t;
int n,m;
string a;
int count=0;
int k=0;
for(int i=0;i<t;i++)
{
cin>>n>>m;
cin>>a;
cin.ignore();
vector<int> level = LEVEL(a);
for(int j=0;j<m;j++)
{
for(int i=0;i<7;i++)
{
if(level[i]>0)
{
count++;level[i]--;
}
}
k=k+count;
count=0;
}
int result=7*m-k;
cout<<result<<endl;
k=0;
}
return 0;
}
Tips:知道需要多少和已有多少,要求还需多少的题目,可以算出需要数和已有数相减得出答案
- 思路:用count1和count2分别表示遵守k规则的人数和符合民意的天数,若count1>=(double)n/2,则count2++。若最终count2>=(double)m/2,则输出yes,否则输出no
代码:
#include<iostream>
using namespace std;
int main()
{
int n,m,k;
cin>>n>>m>>k;
int count1=0,count2=0;
for(int i=1;i<=m;i++)
{
count1=0;
for(int j=1;j<=n;j++)
{
int num;
cin>>num;
if(num==k)count1++;
}
if(count1>=(double)n/2)count2++;
}
if(count2>=(double)m/2)cout<<"YES";
else
cout<<"NO";
return 0;
}
- 思路:用map映射q次变化后各个字母的对应关系,再用for循环逐个修改字符串
代码:#include<bits/stdc++.h>
using namespace std;
int main()
{
int n,q;
string s;
cin>>n>>s>>q;
map<char,char> charMap;
for(char c='a';c<='z';c++)
{
charMap[c]=c;
}
char x,y;
for(int i=0;i<q;i++)
{
cin>>x>>y;
for(char c='a';c<='z';c++)
{
if(charMap[c]==x)charMap[c]=y;
}
}
for(int i=0;i<n;i++)
{
s[i]=charMap[s[i]];
}
cout<<s;
return 0;
}
Tips:像这种时间复杂度非常大,容易超时的题目,可以捕捉题目关键信息,去掉一些不必要的过程来简化程序,减少时间复杂度
总结:对于C++的各个函数并不是很了解,遇见问题并没有第一时间想到函数来快速解决问题,同时还有一个问题就是对题目的意思看不懂,有时候有些题目我真的不知道他在讲什么意思。还是多加练习才做到熟练吧!