• 剑指offer,双指针法,vector输出不完美


    原因:由于在第一个res push_back给allRes的时候allRes的列已经确定,所以在输出的时候会输出一些多余的东西,在输出的时候不好处理

    #include <iostream>
    #include "algorithm" 
    #include "cmath"
    #include "string"
    #include <vector> 
    using namespace std;
    
    int main()
    {
            int sum=200;
            
            vector<vector<int> > allRes;
            int phigh = 2,plow = 1;
             
            while(phigh > plow){
                int cur = (phigh + plow) * (phigh - plow + 1) / 2;
                if( cur < sum)
                    phigh++;
                 
                if(cur == sum){
                    vector<int> res;
                    for(int i = plow; i<=phigh; i++)
                        res.push_back(i);
                    allRes.push_back(res);
                    plow++;
                    //vector<int>().swap(res);
    
        res.clear();
        }
                 
                if(cur > sum)
                    plow++;
            }
    //        for( vector<vector<int> >::iterator it=allRes.begin();it!=allRes.end();it++){error cout
    //            cout<<*it<<endl;
    //        }
            for(int i=0;i<allRes.size();i++){//right cout
            for(int j=0;j<allRes[0].size();j++){
                cout<<allRes[i][j]<<" ";
            }cout<<'
    ';
        } 
    }

    直接用二维数组进行替代,输出更好控制

    #include <iostream>
    #include "algorithm" 
    #include "cmath"
    #include "string"
    #include <vector> 
    using namespace std;
    
    int main()
    {
            int sum=200;
            
            int allRes[100][100]={0};
            int phigh = 2,plow = 1;
            int t=0; 
            while(phigh > plow){
                int cur = (phigh + plow) * (phigh - plow + 1) / 2;
                if( cur < sum)
                    phigh++;
                 
                if(cur == sum){    
                    for(int j=plow;j<=phigh;j++){
                    allRes[t][j-plow]=j;    
                    }t++;
                    plow++;
                    //vector<int>().swap(res);
    
        //res.clear();
        }
                 
                if(cur > sum)
                    plow++;
            }
    //        for( vector<vector<int> >::iterator it=allRes.begin();it!=allRes.end();it++){error cout
    //            cout<<*it<<endl;
    //        }
            int f=1;
            for(int i=0;i<100;i++){//right cout
            if(f==0) break;
            for(int j=0;j<100;j++){
                if(allRes[i][0]==0){
                    f=0;break;
                }
                if(allRes[i][j])
                cout<<allRes[i][j]<<" ";
                
            }cout<<'
    ';
        } 
    }

    不一样的烟火
  • 相关阅读:
    Robin Hood CodeForces
    Arthur and Questions CodeForces
    AC日记——过河卒 洛谷 1002
    加密(模拟)
    AC日记——codevs 1086 栈 (卡特兰数)
    AC日记——搞笑世界杯 codevs 1060(dp)
    AC日记—— codevs 1031 质数环(搜索)
    AC日记——产生数 codevs 1009 (弗洛伊德)(组合数学)
    AC日记——阶乘之和 洛谷 P1009(高精度)
    AC日记——逃跑的拉尔夫 codevs 1026 (搜索)
  • 原文地址:https://www.cnblogs.com/cstdio1/p/11243441.html
Copyright © 2020-2023  润新知