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}
请问大佬有没有什么好的办法。。。谢谢 #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位。如果不对请解释一下。 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} {:10_266:} #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;
}
感谢大佬!太感谢了! 我后来又稍微改了改大佬的代码#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:},太感谢了! Mountain_gs 发表于 2019-2-10 13:56
大佬,能再问一个问题吗,如何在0到n之间产生一个随机数呢。。 调用rand()就行了,再写个函数在a,b之间取随机数
int random(int a, int b)
{
int r;
return rand() % (b - a) + a;
} ok!
还有大佬,为什么第29行else后面不加{}还能运行呀。。。{:10_266:},太奇妙了,这是什么原理
页:
[1]