报数问题
#include<stdio.h>int main()
{
int n,i,j;
scanf("%d",&n);
int a={0};
for(i=0;i<n;i++)
{
a=i+1;
}
i=0;
int i1=1,count=n-1;
while(count)
{
if(a!=0)
{
if(i1%3==0)
{
a=0;
count--;
}
if(i==n-1)
{
i=0;
}
else
{
i++;
}
i1=i1+1;
if(i1==4)
{
i1=1;
}
}
else
{
if(i<n-1)
{
i++;
}
else if(i==n-1)
{
i=0;
}
}
}
for(i=0;i<n;i++)
{
if(a!=0)
{
printf("%d",a);
}
}
return 0;
}
找个人帮我优化一下,感觉我写的好乱{:10_333:} 这个问题我回答过,我的程序如下(不是对你的程序的优化,从今年开始,我已经不再回答花时间多的问题了,不好意思):
// 有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后
// 留下的是原来第几号的那位
#include<stdio.h>
#define nmax 50
main()
{
int i, k, m, n, num, *p;
printf("please input the total of numbers:");
scanf("%d", &n);
p = num;
for (i = 0;i < n;i++)
*(p + i) = i + 1;
i = 0;
k = 0;
m = 0;
while (m < n - 1)
{
if (*(p + i) != 0)
k++; // 报数号
if (k == 3) // 报数为3的置0出局
{
*(p + i) = 0;
k = 0;
m++; // 出局人数
}
i++; // 数组的下标
if (i == n)
i = 0; // 一轮报数完成,重新开始报数
}
while (*p == 0) p++;
printf("The last one is %d\n", *p);
} 本帖最后由 jackz007 于 2021-1-13 02:20 编辑
#include <stdio.h>
int main(void)
{
int d = {0} , e , i , j, n ;
scanf("%d" , & n) ;
for(i = 1 ; i < n + 1 ; i ++) d = i ; // 用索引号为数组元素编号
for(e = 0 , i = 1 ; n > 2 ;) {
e ++ ;
if(e == 3) { // 数到 3
for(j = i ; j < n ; j ++) d = d ; // 数组整体向前搬家,删除数到 3 的数组元素
e = 0 ;
n -- ;
} else {
i ++ ;
}
if(i > n) i = 1 ;
}
printf("%d\n" , d) ; // 最后剩下 2 个元素,显示后面的那个
}
页:
[1]