其他分享
首页 > 其他分享> > 小小bai遇到一道比较绕的题目

小小bai遇到一道比较绕的题目

作者:互联网

有n个人围成一圈,顺序从零排号。从第一个人开始报数(从1到3报数),

凡报到3的人 退出圈子,问最后留下的是原来第几号的那位。

   a[4] = {1, 2, 3, 4,};

小白的思路是这样:

【1】/* 使用一个计数器,一个用来计总共经过多少次,逢3变0      
【2】变0的同时,将其值变为0的数移动到最后一个(使用冒泡排序一步步交换到后面)             
【3】 还有一个变量n记录数组的长度,每次清零用来记录数组内的个数,每经过一次步骤【2】数据内减一 ,让每次循环都变成只有n个数内部循环   
     */

 代码如下

#include<stdio.h>
void swap_delete(int array[],int n,int m);
void swap(int *p1,int *p2);
void show(int array[]);		//打印出数字
int main(void)
{
	int a[4] = {1, 2, 3, 4};
	int n=3;
	int counts2=1;
	int i;
	//counts2从1开始
	
	
	show(a);
	// 每次循环内部,i要不断从0数到最后的数字n,每经过一次步骤【2】数据内减一
	while(n)
	{
		for(i=0;i<=n;i++)
		{
			if(counts2%3==0)
			{
				counts2=counts2%3;
				//将i对应的值变为0并交换到后面,n的值减一;
				
				a[i]=0;
				swap_delete(a,i,3);
				n--;
			}
			counts2++;
		}
	}
	show(a);
	
	return 0;
}
	
	
void swap_delete(int array[],int n,int m)
{
	int i;
	for(i=n;i<m;i++)
		swap(&array[i],&array[i+1]);		//i+1=m
}

void swap(int *p1,int *p2)
{
	int mid=*p1;
	*p1=*p2;
	*p2=mid;
}
		
void show(int array[])
{
	int i;
	for(i=0;((i<4)&&(array[i]!=0));i++)
		printf("%d ",array[i]);
	printf("\n");
}

第一种情况

当n从3开始,数组内部有4个数,每次counts从1开始到0(也就是3)结束

结果出现这个

对结果进行调试

    ‘  

第二次修改

当n从4开始,数组内部有4个数,每次counts从1开始到0(也就是3)结束

程序修改如下

调试结果如下

   

   

 

呈现这结果况

 

第三次修改

当n从4开始,数组内部有4个数,每次counts从1开始到0(也就是3)结束,(循环共计3次)最终总的程序在n=1时结束

 

 调试结果最终终于成功

   

     

 

标签:小小,题目,int,void,个数,每次,数组,counts,bai
来源: https://blog.csdn.net/HEIS1HE/article/details/123248505