c语言编程题

有两道c语言的编程题,麻烦高手帮帮忙了
第一道:17个人围坐一圈,顺序编号为1,2,3,…,17。现在从第一个人开始数起,每数到7时,这个人就从圈里出来,再从下一个数重新开始数1,2,…,7,数到第7的这个人也从圈里出来,直到全部17个人从圈里出来为此。例如,前面站出来的4个人是7,14,4和12。编程输出从圈里出来的人的顺序。(利用数组)
第二道:.编写函数,将n个整数的数列进行重新排放,重新排放后的结果为:前段都是奇数,后段都是偶数,并编写主函数完成:
①输入10个整数;
②调用此函数进行重排;
③输出重排后的结果。
谢谢了!

第一个其实用循环链表更方便……不过既然要求数组那就数组吧
#include "stdio.h"

main()
{
int a[17]={0};
int i,j,m=-1;
for(i=0;i<17;i++)
{
for(j=0;j<7;j++)
{
m++;
m=m%17;
if(a[m]==1)
{
j--;
continue;
}
}
a[m]=1;
printf("%d ",m+1);
}
return 0;
}
第二个还可以吧,用了快速排序的思想

#include "stdio.h"
fun(int *a)
{
int i=0,j=9;
int m;
while(i<j)
{
while(i<j&&(a[i]%2))i++;
while(i<j&&!(a[j]%2))j--;
m=a[i];
a[i]=a[j];
a[j]=m;
}
return 0;
}
main()
{
int a[10]={0};
int i,j,m=-1;
for(i=0;i<10;i++)
{
scanf("%d",&a[i]);
}
fun(a);
for(i=0;i<10;i++)
{
printf("%d ",a[i]);
}
system("pause");
return 0;
}

希望给分,谢谢
温馨提示:答案为网友推荐,仅供参考
第1个回答  2008-10-29
给你答一道吧:
#include "stdio.h"

main()
{
int ren[18]; // 1 表示在座,0 表示出局
int i;
// 开始都在座
for ( i = 1; i <= 17; i++)
{
ren[i] = 1;
}

// 开始报号
int wz = 1;// 当前报号位置
for( i=1; i<=17; i++)
{
int bhrs = 0; // 第i次已报号人数
while ( true )
{
bhrs += ren[wz];
if ( bhrs == 7)
{
break;
}

wz++;
if (wz == 18)
{
wz = 1;
}
}
printf("第 %2d 个出局: 位置号 %2d \n", i, wz);

ren[wz] = 0; // 出局
wz++; //下一个开始报数
if (wz == 18)
{
wz = 1;
}
}
return 0;
}
第2个回答  2008-10-29
先提一下(1)的思路;
数组元素内容存放下一个出列的元素的下标,从而构成一个出列元素的顺序链表,然后输出这个顺序链表即可
这样逻辑结构比较复杂,要==
第3个回答  2008-10-29
学习

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网