从一到三报数,是三退出(指针)(数组)
2022年 03月 08 日

BIGFISH

有n个人围成一圈,顺序排号。从第一人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。
程序的运行示例如下:
请输入人数:30
30个人中最后留下的是第29号。

输入提示:"请输入人数:"
输入格式:"%d"
输出提示: "%d个人中最后留下的是第%d号。"
指针:

#include
#define nmax 500    //定义人数最大值 
int main()
{
    int i, k, m, n, num[nmax], * p;
    printf("请输入人数:");
    scanf("%d", &n);
    p = num;            //p指向数组元素首地址 
    for (i = 0; i < n; i++)
    {
         *(p + i) = i + 1;          //给数组元素1-n顺序赋值 

    }
    i = 0;       //指针回溯到第一个 
    k = 0;      //k计数 初值0 
    m = 0;
    while (m < n - 1)
    {
        if (*(p + i) != 0)
        {
            k++;       //如果计数不到3,k++ 
        }
        if (k == 3)              //报数到3  对应数组元素赋值为0 
        {
            *(p + i) = 0;
            k = 0;            //计数器变为0 
            m++;            //继续向后进行  
        }
        i++;                //i++指针向后移动 
        if (i == n)
        {
            i = 0;           //如果到达最后,把最后元素当成第一个继续找 

        }
    }
    while (*p == 0)
    {
        p++;
    }
    printf("%d个人中最后留下的是第%d号。", *p);      //输出唯一不是0的人· 
}

数组:

# include 
int main(void)
{
	int k[500];
	int a, b, c ,d,e,f;
	printf ("请输入人数:");
	scanf("%d", &a);

	for (b = 1; b <= a; b++)
	{
		k[b] = b ;
	}
	c = 0;
	d = 1;
	e = 0;
	for (b = 1; d < a; b++)
	{
		if (k[b] == 0)
		{

		}
		if (k[b] != 0)
		{
			c++;
		}
		if (c == 3)
		{
	//		printf("%d",-k[b]);
			k[b] = 0;
			c = 0;
			d++;
		}
		if (b == 30)
		{
			b = 0;
			printf("\n");
		}
	}
//	printf("\n---------------------");
	for (b = 1; b <= a; b++)
	{
		if (k[b] != 0)
		{
			printf("%d", -k[b]);
		}
	}

	return 0;
}

从一到三报数,是三退出(指针)(数组)

有n个人围成一圈,顺序排号。从第一人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。
程序的运行示例如下:
请输入人数:30
30个人中最后留下的是第29号。

输入提示:"请输入人数:"
输入格式:"%d"
输出提示: "%d个人中最后留下的是第%d号。"
指针:

#include
#define nmax 500    //定义人数最大值 
int main()
{
    int i, k, m, n, num[nmax], * p;
    printf("请输入人数:");
    scanf("%d", &n);
    p = num;            //p指向数组元素首地址 
    for (i = 0; i < n; i++)
    {
         *(p + i) = i + 1;          //给数组元素1-n顺序赋值 

    }
    i = 0;       //指针回溯到第一个 
    k = 0;      //k计数 初值0 
    m = 0;
    while (m < n - 1)
    {
        if (*(p + i) != 0)
        {
            k++;       //如果计数不到3,k++ 
        }
        if (k == 3)              //报数到3  对应数组元素赋值为0 
        {
            *(p + i) = 0;
            k = 0;            //计数器变为0 
            m++;            //继续向后进行  
        }
        i++;                //i++指针向后移动 
        if (i == n)
        {
            i = 0;           //如果到达最后,把最后元素当成第一个继续找 

        }
    }
    while (*p == 0)
    {
        p++;
    }
    printf("%d个人中最后留下的是第%d号。", *p);      //输出唯一不是0的人· 
}

数组:

# include 
int main(void)
{
	int k[500];
	int a, b, c ,d,e,f;
	printf ("请输入人数:");
	scanf("%d", &a);

	for (b = 1; b <= a; b++)
	{
		k[b] = b ;
	}
	c = 0;
	d = 1;
	e = 0;
	for (b = 1; d < a; b++)
	{
		if (k[b] == 0)
		{

		}
		if (k[b] != 0)
		{
			c++;
		}
		if (c == 3)
		{
	//		printf("%d",-k[b]);
			k[b] = 0;
			c = 0;
			d++;
		}
		if (b == 30)
		{
			b = 0;
			printf("\n");
		}
	}
//	printf("\n---------------------");
	for (b = 1; b <= a; b++)
	{
		if (k[b] != 0)
		{
			printf("%d", -k[b]);
		}
	}

	return 0;
}

上一篇
指针总结
赞 (0)

猜您想看

评论区(暂无评论)

这里空空如也,快来评论吧~

我要评论