这道C语言题怎么做?
有100人按编号从一到一百排成一排,从1开始报数,凡报到3的倍数者退出队列,直至报到队尾,然后又从队尾开始向队首报数(从1开始报),仍是报到3的倍数者退出队列,以上过程反...
有100人按编号从一到一百排成一排,从1开始报数,凡报到3的倍数者退出队列,直至报到队尾,然后又从队尾开始向队首报数(从1开始报),仍是报到3的倍数者退出队列,以上过程反复进行,直至队列中只剩下2人,求着两人的原始编号。
展开
3个回答
展开全部
#include<stdio.h>
main()
{
int a[100],i,j,k,n,m;
int tem;
printf("Please input the value of n and m like [n:m]\n");
while(1)
{
scanf("%d:%d",&n,&m);
for(i=0;i<n;i++)
a[i]=i+1;
for(i=1;i<n;i++)
for(j=1;j<m;j++)
{
tem=a[i-1];
for(k=i;k<n;k++)
a[k-1]=a[k];
a[n-1]=tem;
}
for(i=0;i<n;i++)
printf("f(%d)=%d\n",i+1,a[i]);
}
getch();
}
这个问题有多种方法可以处理,我知道的就有四种,
现在告诉你一种简单处理方穗判法,用数组元素的平移
来实现,有兴趣自己分析吧。首先要输入n:m,n表
示总数,m表示要报的数,在这里是100:3,我以前
编的程序是输出整个过程,按照辩族拆你的携枣题意你让它输
出最后两个就是了。
main()
{
int a[100],i,j,k,n,m;
int tem;
printf("Please input the value of n and m like [n:m]\n");
while(1)
{
scanf("%d:%d",&n,&m);
for(i=0;i<n;i++)
a[i]=i+1;
for(i=1;i<n;i++)
for(j=1;j<m;j++)
{
tem=a[i-1];
for(k=i;k<n;k++)
a[k-1]=a[k];
a[n-1]=tem;
}
for(i=0;i<n;i++)
printf("f(%d)=%d\n",i+1,a[i]);
}
getch();
}
这个问题有多种方法可以处理,我知道的就有四种,
现在告诉你一种简单处理方穗判法,用数组元素的平移
来实现,有兴趣自己分析吧。首先要输入n:m,n表
示总数,m表示要报的数,在这里是100:3,我以前
编的程序是输出整个过程,按照辩族拆你的携枣题意你让它输
出最后两个就是了。
展开全部
#include<举斗stdio.h>
int main(){
int a[100],i,j=0,num=0;
for(i=0;i<尺或100;i++){
a[i]=i+1;
}
for(i=0;num<正困磨98;i++){
if(a[i]==-1){;}
else{
j++;
if(j%3==0){
a[i]=-1;
num++;
}
}
if(i==99){
i=0;
}
}
for(i=0;i<100;i++){
if(a[i]!=-1){
printf("%-4d",i+1);
}
}
printf("\n");
return 0;
}
int main(){
int a[100],i,j=0,num=0;
for(i=0;i<尺或100;i++){
a[i]=i+1;
}
for(i=0;num<正困磨98;i++){
if(a[i]==-1){;}
else{
j++;
if(j%3==0){
a[i]=-1;
num++;
}
}
if(i==99){
i=0;
}
}
for(i=0;i<100;i++){
if(a[i]!=-1){
printf("%-4d",i+1);
}
}
printf("\n");
return 0;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
例7、Joseph问题
N个人排成一圈,从1数到K,第K个人出圈,请输出出运陵圈人的次序。
测试前明案例:(N=10,K=4)
下标 0 1 2 3 4 5 6 7 8 9 出局者
第 1轮 0 1 2 -1 4 5 6 7 8 9 3
第 2轮 0 1 2 -1 4 5 6 -1 8 9 7
第 3轮 0 -1 2 -1 4 5 6 -1 8 9 1
第 4轮 0 -1 2 -1 4 5 -1 -1 8 9 6
第 5轮 0 -1 -1 -1 4 5 -1 -1 8 9 2
第 6轮 0 -1 -1 -1 4 5 -1 -1 8 -1 9
第 7轮 0 -1 -1 -1 4 5 -1 -1 -1 -1 8
第 8轮 -1 -1 -1 -1 4 5 -1 -1 -1 -1 0
第 9轮 -1 -1 -1 -1 4 -1 -1 -1 -1 -1 5
第10轮 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 4
#define N 10
#define K 4
void main()
{ int a[N],i,j,k; /* k是慧悄告待出局者的下标 */
for(i=0; i<N; i++) a[i]=i;
k=0;
for(i=0; i<N; i++) /* 每次循环找到一个出局者 */
{ j=0;
while(1)
{ if(a[k]!=-1) j++; /* 数人头 */
if(j==K) break;
k=(k+1) % N; /* 转圈数数 */
}
printf("%d,",a[k]); a[k]=-1;
}
}
看看
改改
N个人排成一圈,从1数到K,第K个人出圈,请输出出运陵圈人的次序。
测试前明案例:(N=10,K=4)
下标 0 1 2 3 4 5 6 7 8 9 出局者
第 1轮 0 1 2 -1 4 5 6 7 8 9 3
第 2轮 0 1 2 -1 4 5 6 -1 8 9 7
第 3轮 0 -1 2 -1 4 5 6 -1 8 9 1
第 4轮 0 -1 2 -1 4 5 -1 -1 8 9 6
第 5轮 0 -1 -1 -1 4 5 -1 -1 8 9 2
第 6轮 0 -1 -1 -1 4 5 -1 -1 8 -1 9
第 7轮 0 -1 -1 -1 4 5 -1 -1 -1 -1 8
第 8轮 -1 -1 -1 -1 4 5 -1 -1 -1 -1 0
第 9轮 -1 -1 -1 -1 4 -1 -1 -1 -1 -1 5
第10轮 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 4
#define N 10
#define K 4
void main()
{ int a[N],i,j,k; /* k是慧悄告待出局者的下标 */
for(i=0; i<N; i++) a[i]=i;
k=0;
for(i=0; i<N; i++) /* 每次循环找到一个出局者 */
{ j=0;
while(1)
{ if(a[k]!=-1) j++; /* 数人头 */
if(j==K) break;
k=(k+1) % N; /* 转圈数数 */
}
printf("%d,",a[k]); a[k]=-1;
}
}
看看
改改
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询