c++ - 我的冒泡排序在数组中引入了“0”的值
问题描述
我为我的 C++ 程序使用了“冒泡排序”,但它在分数贪心程序中的数组中引入了随机“0”值
int sorteaza()
{
int aux,schimb,i;
do
{
schimb=0;
for (i=0;i<=n;++i)
if (G[i][3]<G[i+1][3])
{
swap(G[i], G[i+1]);
}
}
while (schimb);
}
这是我的全部代码:
#include<iostream>
using namespace std;
int n; // Numarul de elemente
float G[100][3]; // Obiecte + detalii masa profit potenta
int masa = 0;
int read_data()
{
cout << "Greutatea Rucsac" << endl;
cin >> masa;
cout << "Obiecte: " << endl;
cin >> n;
for(int i = 1; i<=n;i++)
{
for(int j = 1; j<=2;j++)
{
cin >> G[i][j];
if(G[i][1] != 0 && G[i][2] != 0)
{
G[i][3] = G[i][2] / G[i][1];
}
}
}
}
// 2 500
// 4 500
int sorteaza()
{
int aux,schimb,i;
do
{
schimb=0;
for (i=0;i<=n;++i)
if (G[i][3]<G[i+1][3])
{
swap(G[i], G[i+1]);
}
}
while (schimb);
}
int verify()
{
for(int i = 1; i<=n;i++)
{
for(int j = 1; j<=3;j++)
{
cout << G[i][j];
cout << endl;
//G[i][3] = G[i][1] / G[i][2];
}
}
}
int greedy()
{
float profit = 0;
int i = 1;
int aux;
while(i<=n && masa>=0)
{
//cout << "G[i][1]: " << G[i][1] << endl;
if(masa>=G[i][1]) {
//cout << "Am ajuns aici";
profit=profit+G[i][2];
masa=masa-G[i][1];
}
else {
//cout << "Am ajuns dincolo";
aux= (masa*100)/G[i][1];
profit = profit + (aux * G[i][2])/100;
break;
}
i++;
}
cout << profit;
}
int main()
{
read_data();
sorteaza();
verify();
// greedy();
}
解决方案
您可能需要<n
代替≤n
(这就是未初始化的值,即 0 的来源)。你错过了冒泡排序中的一个循环。现在你只是将最小的元素冒泡到列表的末尾。
也不知道你在用那个schimb
和while条件做什么。
此外,您将 G 定义为,float[100][3]
因此您不能使用G[i][3]
, only G[i][2]
。
int sorteaza()
{
int i,j;
for (i=0; i<n; i++)
{
for (j=i+1; j<n; j++)
{
if (G[i][2] < G[j][2])
{
swap(G[i], G[j]);
}
}
}
}
推荐阅读
- r - s(V1, df = 3) 中的错误:找不到函数“s”
- c# - 遍历对象的值
- amazon-athena - R Studio Server <-> Athena 集成速度极慢?
- php - 与mysql本地连接的视图不一致
- python - pyCharm 命令行参数不起作用
- python - 根据“父”元组值对字典进行排序
- ios - 如何使用 Swift 修复无法将“DataClass”类型的值分配给“[DataClass]”类型的错误
- javascript - 如何将文本放在单选按钮标签中?
- javascript - EqualTo() not working in Firebase DB call
- mysql - 'exists' 中的 Sql 'like' 条件