用c语言一位数组实现约瑟夫环
2012-05-17 20:34
351 查看
用一位整形数组简单的实现约瑟夫环的问题,每一次出列了一个人就把后面的人往前移动,总的人数也做减1操作。把出列的人放到另一个整形数组当中,具体的代码实现如下面的代码:
#include <stdio.h>
int Joseput( int a[],int k,int m,int num )
{
int i,j,t,g,y;
int temp;
j=0;
int b[9]={0};//用一个整形数组b用来保存出列人的编号;
t=k+m-2;
b[j]=a[t];//先选出第一个人放在b[0];
for(g=t;g<num-1;g++)/*把出列的位子用后面的人给占据依次到最后一个*/
{
a[g]=a[g+1];
}
num--;//总数减一
for(i=num,j=1;i>1&&j<9;i--,j++)//i保存总的人数,j表示b数组的下标
{
t=t+m-1;//下一个出列人在原数组的下标
t=t%i;//预防下标大于总数,就对总数取余
b[j]=a[t];
for(g=t;g<i;g++)//把出列的位子用后面的人给占据依次到最后一个
{
a[g]=a[g+1];
}
}
b[j]=a[0];//把最后剩下的元素放到b数组的最后一位;
for(i=0;i<num+1;i++)
{
printf("%d\t",b[i]);
}
}
int main()
{
int a[]={1,2,3,4,5,6,7,8,9};
Joseput(a,1,5,sizeof(a)/sizeof(a[0]));
return 0;
}
以上代码输出结果是:5 1 7 4 3 6 9 2 8
#include <stdio.h>
int Joseput( int a[],int k,int m,int num )
{
int i,j,t,g,y;
int temp;
j=0;
int b[9]={0};//用一个整形数组b用来保存出列人的编号;
t=k+m-2;
b[j]=a[t];//先选出第一个人放在b[0];
for(g=t;g<num-1;g++)/*把出列的位子用后面的人给占据依次到最后一个*/
{
a[g]=a[g+1];
}
num--;//总数减一
for(i=num,j=1;i>1&&j<9;i--,j++)//i保存总的人数,j表示b数组的下标
{
t=t+m-1;//下一个出列人在原数组的下标
t=t%i;//预防下标大于总数,就对总数取余
b[j]=a[t];
for(g=t;g<i;g++)//把出列的位子用后面的人给占据依次到最后一个
{
a[g]=a[g+1];
}
}
b[j]=a[0];//把最后剩下的元素放到b数组的最后一位;
for(i=0;i<num+1;i++)
{
printf("%d\t",b[i]);
}
}
int main()
{
int a[]={1,2,3,4,5,6,7,8,9};
Joseput(a,1,5,sizeof(a)/sizeof(a[0]));
return 0;
}
以上代码输出结果是:5 1 7 4 3 6 9 2 8
相关文章推荐
- C语言 实现约瑟夫环 (有一个数组a[1000]存放0--1000;要求每隔二个数删掉一个数)
- C语言用数组1. 简单约瑟夫环问题: N个人,编号从1~N围成一圈,输入一个数T,从1号开始报数,报到T的人出圈;下一人又从1开始报数,下一个报到T的人出圈,输出出圈顺序。 考虑问实现约瑟夫环问题
- C语言实现约瑟夫环,使用循环单链表和循环数组2种方法
- 用C语言关于学生管理系统的几种实现方法(一位数组,二维数组,指针,结构体)
- C语言,数组实现约瑟夫环问题(两种方法)
- 约瑟夫环的C语言数组实现
- 约瑟夫环问题(数组法)c语言实现
- 约瑟夫环问题(c语言数组实现)
- C语言利用结构体数组实现学生成绩管理系统
- 静态数组实现的顺序表(C语言实现)
- 线性结构 -- 连续存储(数组), 1个简单的c语言代码实现.
- C语言-实现约瑟夫环
- 用c语言指针实现给整形数组冒泡排序
- C语言 程序实现将一个数组所有奇数放在前半部分,偶数位于后半部分
- 约瑟夫环问题的数组实现
- 约瑟夫环问题的两种实现[链表+数组]
- 【c语言】使用数组解决 约瑟夫环问题
- C语言多维数组的存储表示和实现
- [leetcode]Merge Sorted Array (两个有序数组的合并 C语言实现)
- C语言实现数组中数字收尾交换