第一个专题心得

  1. 思路:用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;}

  1. 思路:将输入的字符串转化为大写再进行判断

   代码:#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;

}

  1. 思路:用字符串输入数据,并以最后一位数的奇偶性判断整个数的奇偶性

   代码:#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:数据过大时可以用字符串进行输入,并通过仔细分析题目化简过程,如本题判断奇偶性只需判断最后一位数的奇偶性即可

  1. 思路:先用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:知道需要多少和已有多少,要求还需多少的题目,可以算出需要数和已有数相减得出答案

  1. 思路:用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;

 }

  1. 思路:用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++的各个函数并不是很了解,遇见问题并没有第一时间想到函数来快速解决问题,同时还有一个问题就是对题目的意思看不懂,有时候有些题目我真的不知道他在讲什么意思。还是多加练习才做到熟练吧!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值