minot4229 发表于 2019-2-9 01:02:46

c++ 编程问题

楼主想要编写一个令在一个一维方程里,从第bi位数至ei位数自动向左相加的程序,方程命名为bool add_left(std::vector<int> v,int bi,int ei);
譬如:
v={1,1,2,2,3,3,4,4}
bi=4,ei=6
v(after)={1,1,2,2,6,0,4,4}
请问大佬有没有什么好的办法。。。谢谢

Mountain_gs 发表于 2019-2-9 11:49:45

#include<iostream>
#include<vector>
#include<stdlib.h>
using namespace std;

vector<int> Add_left(vector<int> v, int bi, int ei)
{
        int temp=0;
        for (int i = bi; i < ei; i++)
        {
                temp += v;
                v = 0;
        }
        v = temp;
        return v;
}

int main()
{
        vector<int> v = { 1,1,2,2,3,3,4,4 };
        v = Add_left(v, 4, 6);
        for (int i = 0; i < v.size(); i++)
        {
                cout << v << " ";
        }
        system("pause");
        return 0;
}


中间自动向左相加的过程我的理解是把第bi位到第ei位加起来赋值个第bi位。如果不对请解释一下。

minot4229 发表于 2019-2-10 06:43:45

Mountain_gs 发表于 2019-2-9 11:49
中间自动向左相加的过程我的理解是把第bi位到第ei位加起来赋值个第bi位。如果不对请解释一下。

嗯嗯,还有一个小问题,就是只有相同的数字相加,
就像这样:
v={1,1,2,2,3,3,4,4,5,5,6,6}
bi=0,ei=v.size()
v={2,4,6,8,10,12,0,0,0,0,0,0}

minot4229 发表于 2019-2-10 07:43:15

{:10_266:}

Mountain_gs 发表于 2019-2-10 13:56:58

#include<iostream>
#include<vector>
#include<stdlib.h>
using namespace std;

vector<int> Add_left(vector<int> v, int bi, int ei)
{
        int temp=0;
        for (int i = bi; i < ei; i++)
        {
                temp += v;
                v = 0;
        }
        v = temp;
        return v;
}

vector<int> Add_Samenum(vector<int> v)
{
        vector<int> v2;
        int temp;
        for (int i = 0; i < v.size(); i++)
        {
                if (v == v)
                {
                        temp = v + v;
                        i++;
                }
                else
                        temp = v;
                v2.push_back(temp);
        }
        while (v2.size() < v.size())
        {
                v2.push_back(0);
        }
        return v2;
}

int main()
{
        vector<int> v1 = { 1,1,2,2,3,3,4,4,5,5,6,6 };
        vector<int> v2 = { 1,1,2,2,3,3,4,4,5,5,6,6 };
        v1 = Add_left(v1, 4, 6);
        v2 = Add_Samenum(v2);
        for (int i = 0; i < v1.size(); i++)
        {
                cout << v1 << " ";
        }
        cout << endl;
        for (int i = 0; i < v2.size(); i++)
        {
                cout << v2 << " ";
        }
        system("pause");
        return 0;
}

minot4229 发表于 2019-2-10 17:33:40

感谢大佬!太感谢了!

minot4229 发表于 2019-2-10 17:34:37

我后来又稍微改了改大佬的代码#include<iostream>
#include<vector>
#include<stdlib.h>
using namespace std;

vector<int> Add_left(vector<int> v, int bi, int ei)
{
      int temp=0;
      for (int i = bi; i < ei; i++)
      {
                temp += v;
                v = 0;
      }
      v = temp;
      return v;
}

vector<int> Add_Samenum(vector<int>& v,int bi,int ei)
{
      vector<int> v2,v3,v4;
      int temp;

      for(int i=bi;i<ei;i++){
          if(v!=0)
          v4.push_back(v);
      }
      for (int i = bi; i < ei; i++)
      {
            if(v!=0){
                if (v == v)
                {
                        temp = v + v;
                        i++;
                }
                else
                        temp = v;
                v2.push_back(temp);
            }
            else{
                v3.push_back(0);
            }

      }
      while (v2.size() < v4.size())
      {
                v2.push_back(0);
      }
      v.erase(v.begin()+bi,v.begin()+ei);
      for(int i=0;i<v2.size();i++){
          v.insert(v.begin()+bi+i,v2);
      }
      for(int i=0;i<v3.size();i++){
          v.insert(v.begin()+bi+v2.size(),v3);
      }

      return v;
}

int main()
{
      vector<int> v1 = { 1,1,2,2,3,3,4,4,5,5,6,6 };
      vector<int> v2 = { 1,1,2,2,3,3,4,4,5,5,6,6 };
      v1 = Add_left(v1, 4, 6);
      for (int i = 0; i < v2.size(); i++)
      {
                cout << v2 << " ";
      }
      std::cout<<std::endl;
      v2 = Add_Samenum(v2,0,4);
      for (int i = 0; i < v2.size(); i++)
      {
                cout << v2 << " ";
      }
      v2 = Add_Samenum(v2,4,8);
      std::cout<<std::endl;
      for (int i = 0; i < v2.size(); i++)
      {
                cout << v2 << " ";
      }
      std::cout<<std::endl;
      v2 = Add_Samenum(v2,8,12);
      std::cout<<std::endl;
      for (int i = 0; i < v1.size(); i++)
      {
                cout << v1 << " ";
      }
      cout << endl;
      std::cout<<std::endl;
      for (int i = 0; i < v2.size(); i++)
      {
                cout << v2 << " ";
      }
      system("pause");
      return 0;
}
这样就能实现目标了{:10_266:},太感谢了!

minot4229 发表于 2019-2-10 17:41:00

Mountain_gs 发表于 2019-2-10 13:56


大佬,能再问一个问题吗,如何在0到n之间产生一个随机数呢。。

Mountain_gs 发表于 2019-2-10 18:33:58

调用rand()就行了,再写个函数在a,b之间取随机数
int random(int a, int b)
{
        int r;
        return rand() % (b - a) + a;
}

minot4229 发表于 2019-2-10 20:11:58

ok!

minot4229 发表于 2019-2-11 00:07:15

还有大佬,为什么第29行else后面不加{}还能运行呀。。。{:10_266:},太奇妙了,这是什么原理
页: [1]
查看完整版本: c++ 编程问题