杭电-模拟-1280-1035

来源:互联网 发布:ubuntu recovery 联网 编辑:程序博客网 时间:2024/06/05 08:12

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1280

最开始我的思路是错的,我先把数据从小到大排序,例如  1234,先3+4,再2+4,2+3。。。但这只适用于连续的自然数,如果是

 3 4 6 7 9  ,如果输出四个,就会按序输出16,15,13,14

错误代码

#include <iostream>#include<algorithm>#include<vector>using namespace std;int main(){    int m,n,i,j;    int s;    bool flag;    vector<int> vec;    while(scanf("%d%d",&m,&n)!=EOF)    {        vec.clear();        while(m--)        {            cin>>s;            vec.push_back(s);        }        sort(vec.begin(),vec.end());        flag=false;        for(i=vec.size()-2;i>=0;i--)        {            for(j=vec.size()-1;j>i;j--)            {                if(n-->0)                {                    if(!flag) flag=true;                    else  cout<<" ";                    cout<<vec[j]+vec[i];                }            }        }            cout<<endl;    }    return 0; }
后来我先将所有的和算出来  存在容器中  在用 sort 排序,用 reverse 反排序

#include <iostream>#include<algorithm>#include<vector>using namespace std;int main(){    int s,m,n,i,j,k;    vector<int> vec1;    vector<int> vec;        bool flag;    while(scanf("%d%d",&m,&n)!=EOF)    {        vec.clear();        vec1.clear();        while(m--)        {            cin>>s;            vec1.push_back(s);        }                for(i=0;i<vec1.size();i++)        {            for(j=i+1;j<vec1.size();j++)            {                vec.push_back(vec1[i]+vec1[j]);            }        }        sort(vec.begin(),vec.end());        reverse(vec.begin(),vec.end());//也可以不要        flag=false;        for(k=0;k<n;k++)  //将此处改成 for(k=vec.size()-1;<span style="font-family: Arial, Helvetica, sans-serif;">k>vec.size()-1-n;k--)</span>        {            if(!flag) flag=true;            else cout<<" ";            cout<<vec[k];        }        cout<<endl;    }    return 0; }

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1035

#include <iostream>#include <cstdio>using namespace std;int main(){    char s[10][10];    int r,c,n,k,i,j;    bool flag;    while(cin>>r>>c>>n&&r!=0||c!=0)    {        for(i=0;i<r;i++)        {            for(j=0;j<c;j++)            {                cin>>s[i][j];            }        }        k=0;        flag=false;        i=0;j=n-1;        while(i<r&&j<c&&i>=0&&j>=0)        {            switch(s[i][j])            {            case 'N':s[i][j]=k++; //k 记录所走的步数,赋值给s[i][j],一旦循环再次回到这个点,s[i][j]已经变成了整数,则执行 default语句                i--;break;            case 'S':s[i][j]=k++;                i++;break;            case 'E':s[i][j]=k++;                j++;break;            case 'W':s[i][j]=k++;                j--;break;            default:k=k-s[i][j];//  循环的步数                flag=true;            }            if(flag)  break;  //一旦循环了一次就跳出while循环        }        if(flag) printf("%d step(s) before a loop of %d step(s)\n",s[i][j],k);// s[i][j]记录未进入循环前的步数        else printf("%d step(s) to exit\n",k);    }    return 0;}



0 0
原创粉丝点击