
{
int temp;
temp = *a;
*a = *b;
*b = temp;
}
void input_data(int num[])
{
int i = 0;
char ch;
do
{
cin >> num[i];
ch = cin.get();
i++;
} while (ch != '\n');
large = i;
}
int main()
{
int count = 0;
int num[N];
input_data(num);
//二维数组赋值
for (int i = 0; i < large; i++)
{
for (int j = 0; j < num[i]; j++)
{
aba[i][j] = 1;
}
}
//输出二维数组
//for (int i = 0; i < large; i++)
//{
// for (int j = 0; j < N; j++)
// cout << aba[i][j];
// cout << endl;
//}
//cout << endl;
int p = 0; //修改了原来的写法
for (int j = 0; j < N; j++)
{
for (int i = large-1,p=0; p<=i; i--,p++)
{
while (aba[p][j] == 0)
{
if (i == p) //先判断
break;
p++;
}
while (aba[i][j] == 1)
{
if (i == p) //先判断
break;
i--;
}
for (;aba[i][j] == 0 && aba[p][j] == 1;)
{
swap(&aba[i][j],&aba[p][j]);
if (i == p || p+1==i )//增加判断
break;
p++;
i--;
}
}
}
//更新一种写法
/*int i = 0;
for (int j = 0; j < N; j++)
{
int n = 0; //n是一排算珠的个数
for (; i < large; i++)
{
if (aba[i][j] == 1)
n++;
}
n -= 1;
for (i = large - 1; i >= 0 && n >= 0; i--, n--)//从下到上给算珠付n个值
{
aba[i][j] = 1;
}
for (; i >= 0; i--)//上面的付为0
{
aba[i][j] = 0;
}
}*/
//输出二维代码
//for (int i = 0; i < large; i++)
//{
// for (int j = 0; j < N; j++)
// cout << aba[i][j];
// cout << endl;
//}
for (int i = 0; i < large; i++)
{
for (int j = 0; j < 20; j++)
{
if (aba[i][j] == 0)
break;
if(aba[i][j] == 1)
count++;
}
num[i] = count;
count = 0;
}
cout << endl;
for (int i = 0; i < large; i++)
cout << num[i]<<" ";
}
2.5 面条排序
如果桌子上有一把长短不一的面条,此时你将面条立起来,下端平放在桌面上,此时你用手掌在空中从上往下缓慢移动,慢慢的,你的手掌触碰到了一根面条(这根面条是最高的),你将这根面条抽走(抽走的面条当然想怎么吃就怎么吃),手继续慢慢向下移动,这时,你又碰到了倒数第二高的面条,你又将其抽走,。。。。
算法中,我们用一个数模拟手,每次-1,为了不至于手掌无处安放,我们将手直接放在最高的面条的顶端。
请你用代码实现这个算法吧。
最后一个没给啥东西,我还理解错题目了(丢人(lll¬ω¬)),我以为是挑出最大值,然后放到最后一个,这不就是选择排序么???
但其实这道题就是手每次向下挪一位,然后看看有木有面条~
十分短小的代码
#include<iostream>
#include<algorithm>//头文件
using namespace std;
int main()
{
int num[6] = { 6,5,4,3,2,1 };
int tmp[6] = { 0 };
int large = *max_element(num,num+6);//找最大值
for (int j = 5; j >= 0; j--)
{
for (int i = 0; i < 6; i++)
if (num[i] == large)//摸到面条
{
tmp[j] = num[i];
num[i] = 0;
}
large--;//手向下挪
}
for (int i = 0; i < 6; i++)
cout << tmp[i];
}
...
for (i = 0; i < 10; i++)
{
scanf("%d", &a[i]);
sum+= a[i];
}
...