算法问题

来源:互联网 发布:网络棋牌源码 编辑:程序博客网 时间:2024/06/04 00:44

10月1放假回来的第一篇文章,因为回来的比较早,把之前说过的一篇关于dijkstra的文章看了一下,我总结了几个问题,我发现贪心算法,所计算的路径不是最短的,只是相对最短的路径。http://blog.csdn.net/tyzsm/article/details/73469595我看了这个博主的算法,至今对于人们常说的最短路径问题还感觉到混乱。好吧言归正传我最近经常看到一个关于硬币翻转的问题,大概就是给6枚硬币,3个正面朝上,3个反面朝上,每次翻动2个,至少翻多少次可以使硬币全部向下?

好了废话不说了,直接上代码


#include <iostream>


using namespace std;


int main()
{
cout << "请输入总共硬币数量:";
int a ;
cin >> a ;
cout << endl;
cout << "请输入正面朝上的硬币数:";
int b;
cin >> b;
cout << "每次翻动硬币的数量:";
int d;
cin >> d;
cout << "请选择求翻转后最终结果,如果全部为正选择N,否则选择 Y";
char c;
cin >> c;
while (!((c != 'n') ^( c != 'y')))
{
cout << "输入变量存在问题";
cin >> c;
}

if (c == 'n')
{
int temp = a - b;
for (int i = 0; i < a; i++)
{
if (!((temp + a * i) % d))
{
cout << endl;
cout << "翻动硬币最少次数:" << i+1;
break;
}
if (i = a - 1)
{
cout << "无法完成";
}


continue;
  }
}
else
{
int temp = b;
for (int i = 0; i < a; i++)
{
if (!((temp + a * i) % d))
{
cout << endl;
cout << "翻动硬币次数最少: " << i+1;
break;
}
if (i = a - 1)
{
cout << "无法完成";
}
}
}
char r;
cin >> r;
return 0;
}

通过上面这个程序,我搞懂一点,就是这句话  while (!((c != 'n') ^( c != 'y')))    之前用‘||’发现一直死循环 。

话说‘||’问题,上次做过一个计算机的面试题,如果‘||‘之前的条件是真,那么’||‘后面的条件是不会运行的。记住是不会运行的。这个里面会有很多陷阱题,我就不一一的总结了。


前几天犯了一个很啥的错误

vector <int > temp ;

temp<< .......;//输入了很多数据 ;

for(int i = 0 ;i < temp.size() ; i++)

{

temp.push_off() ;

}

这个问题挺傻的应该提前把temp.size() 的值输出出来 。


那道题题目大概就是0~5个并列的小组 ,从中让某个小组排在另外一个小组之后,然后后面的小组序号将变成前面小组的序号,经过几轮塞选之后,只剩下一组,问原来组的次序是多少?


代码如下:


#include <iostream>
#include <vector>
#define num  6 




using namespace std;


vector<vector<int>> temp;
vector<int> shunxu;


int main()
{
for (int i = 0; i < num; i++)
{
shunxu.push_back(i);
temp.push_back(shunxu);
shunxu.clear();
}
for (int i = 0; i < num - 1; i++)
{
int a, b;
cin >> a;
cin >> b;
int bsize = temp[b].size();
for (int j = 0; j < bsize ; j++)
{
temp[a].push_back(temp[b].front());
temp[b].erase(temp[b].begin());
}
if (i == num-2)
{
for (int j = 0; j < temp[a].size();j++)
{
cout << temp[a].at(j);
}
}
}
char a;
cin >> a;
return 0;
}


这个里面学到的就是vector<vector<int>> a ;

当我把a[1]里面的数全部删除了,他容器仍存在。之前没注意这个问题。


好吧最后时间,有个简单的问题,给出一个数列,例如[-1,2,-3,-5 ,6,-2,8,-7] ;

问哪段数据的和最大,其实问题就是3个for循环,最外面是for循环是起点,第二层是尾点,第三层介于起点和尾点。


好吧博主饿了,不扯了,待这几天博主在看几个算法,在进行发布。

原创粉丝点击