第 12.3~12.14 大周博客

来源:互联网 发布:搜狗抢票软件无法登陆 编辑:程序博客网 时间:2024/05/22 14:37

继上次的牛与问题,特此再做总结。

复述一下问题(还是简化版):

牛发明了一种语言,英文单词开头是元音字母的直接在后面加“cow”,不是的把最前面的单词移到最后再加“ow;

经过大神的指导之后,终于开窍的我写出了以下代码:


#include<bits/stdc++.h>using namespace std;int main(){int a;string b;    cin>>a;    for(int i=1;i<=a;i++)    {    cin>>b;    if(b[0]=='a'||b[0]=='e'||b[0]=='i'||b[0]=='o'||b[0]=='u') {cout<<b<<"cow"<<endl;}    else     {    for(int j=1;j<b.size();j++)        {        cout<<b[j];        }        cout<<b[0]<<"ow"<<endl;    }    }    return 0;}  

对于本代码的理解如下图;


#include<bits/stdc++.h>using namespace std;int main(){int a;string b;//定义字符串;     cin>>a;    for(int i=1;i<=a;i++)    {    cin>>b;//输入A个字符串;     if(b[0]=='a'||b[0]=='e'||b[0]=='i'||b[0]=='o'||b[0]=='u')//b[0]是字符串第一个字母; {cout<<b<<"cow"<<endl;//开头是元音,即在结尾直接加“COW”; }    else     {    for(int j=1;j<b.size();j++)//输出字符串中除第一个外的各个字母;         {        cout<<b[j];        }        cout<<b[0]<<"ow"<<endl;//把第一个字母放到末尾,并在最后加“OW”;     }    }    return 0;}

对于恐怖服装这一题,鄙人做出了以下改动:


#include<bits/stdc++.h>using namespace std;int main(){long long n,s,a[1001000],ans=0;cin>>n>>s;for(int i=1;i<=n;i++){cin>>a[i];//输入每头牛的长度; }for(int j=1;j<=n;j++){for(int k=j+1;k<=n;k++)//声明:这里的意思是K每次都是代表第J头牛后面的牛,避免了自己和自己,也避免了重复; {if(a[j]+a[k]<=s)//长度不大于服装长度,可选择的选法+1; {ans++;}}}cout<<ans<<endl;return 0;}

对于重复这一点,鄙人是看到一组数据后才想到的,源代码+原思想如下:


#include<bits/stdc++.h>using namespace std;int main(){int n,s,a[10000],ans=0;cin>>n>>s;for(int i=1;i<=n;i++){cin>>a[i];}for(int j=1;j<=n;j++) {for(int k=1;k<=n;k++){if(a[j]+a[k]<=s&&a[j]!=a[k])//这时,每种选法都被重复选中两次,所以后面ANS要除以2; {ans++;}}}cout<<ans/2<<endl;return 0;}

该代码有以下几点问题:


#include<bits/stdc++.h>using namespace std;int main(){int n,s,a[10000],ans=0;//数组开的太小; cin>>n>>s;for(int i=1;i<=n;i++){cin>>a[i];}for(int j=1;j<=n;j++) {for(int k=1;k<=n;k++){if(a[j]+a[k]<=s&&a[j]!=a[k])//假设一种特殊情况:当第J头牛和第K头牛长度相等时,K也不等于J,就少了一次; {ans++;}}}cout<<ans/2<<endl;return 0;}

(You friend is offline)