一个类似约瑟夫环的程序,求.
一个类似约瑟夫环的程序,求高手指点...
问题描述:
输入一个由随机数组成的数列(数列中每个数均是大于0的整数,长度已知),和初始计数值m。从数列首位置开始计数,计数到m后,将数列该位置数值替换计数值m,并将数列该位置数值出列,然后从下一位置从新开始计数,直到数列所有数值出列为止。如果计数到达数列尾段,则返回数列首位置继续计数。
比如:输入的随机数列为:3,1,2,4,初始计数值m=7,从数列首位置开始计数(数值3所在位置)
第一轮计数出列数字为2,计数值更新m=2,出列后数列为3,1,4,从数值4所在位置从新开始计数
第二轮计数出列数字为3,计数值更新m=3,出列后数列为1,4,从数值1所在位置开始计数
第三轮计数出列数字为1,计数值更新m=1,出列后数列为4,从数值4所在位置开始计数
最后一轮计数出列数字为4,计数过程完成。
以上的描述,下面是我写的代码,只打印出第一次执行的情况就结束了。请各位指出问题在哪?
void array_iterate(int len, int input_array[], int m, int output_array[]){ //m为第一次要出局数字的位置
int pos = 0; //要出局数字的位置,初始0
int j = 0; //output_array[]的下标
int tmp = 0; //保存上一次出局数字的位置
int flag = 0; //记录已出局数字的个数
while(flag > 10) //出局数字大于10时停止
{
if(pos >= 9){ //位置大于数组长度,取余
pos = pos%10;
}else{
pos = tmp+(m-1); //这一次要出局的位置
}
if(tmp >= 10-i){ //tmp大于等于数组剩下的长度,取余
tmp = tmp%10;
}else{
tmp = i+1; //这一次的位置保存进临时变量
}
m = input_array[i]; //m变化为该位置的值
printf("\n出局数为%d,m变为%d",input_array[i],m);
output_array[j] = input_array[i]; //出局的数字保存在输出数组中
j++;
input_array[i] = 0; //出局的数字置零,表示出局
flag++; //置零标志加1
}
问题描述:
输入一个由随机数组成的数列(数列中每个数均是大于0的整数,长度已知),和初始计数值m。从数列首位置开始计数,计数到m后,将数列该位置数值替换计数值m,并将数列该位置数值出列,然后从下一位置从新开始计数,直到数列所有数值出列为止。如果计数到达数列尾段,则返回数列首位置继续计数。
比如:输入的随机数列为:3,1,2,4,初始计数值m=7,从数列首位置开始计数(数值3所在位置)
第一轮计数出列数字为2,计数值更新m=2,出列后数列为3,1,4,从数值4所在位置从新开始计数
第二轮计数出列数字为3,计数值更新m=3,出列后数列为1,4,从数值1所在位置开始计数
第三轮计数出列数字为1,计数值更新m=1,出列后数列为4,从数值4所在位置开始计数
最后一轮计数出列数字为4,计数过程完成。
以上的描述,下面是我写的代码,只打印出第一次执行的情况就结束了。请各位指出问题在哪?
void array_iterate(int len, int input_array[], int m, int output_array[]){ //m为第一次要出局数字的位置
int pos = 0; //要出局数字的位置,初始0
int j = 0; //output_array[]的下标
int tmp = 0; //保存上一次出局数字的位置
int flag = 0; //记录已出局数字的个数
while(flag > 10) //出局数字大于10时停止
{
if(pos >= 9){ //位置大于数组长度,取余
pos = pos%10;
}else{
pos = tmp+(m-1); //这一次要出局的位置
}
if(tmp >= 10-i){ //tmp大于等于数组剩下的长度,取余
tmp = tmp%10;
}else{
tmp = i+1; //这一次的位置保存进临时变量
}
m = input_array[i]; //m变化为该位置的值
printf("\n出局数为%d,m变为%d",input_array[i],m);
output_array[j] = input_array[i]; //出局的数字保存在输出数组中
j++;
input_array[i] = 0; //出局的数字置零,表示出局
flag++; //置零标志加1
}