有n个人围成一圈,按顺序从1到n编号。从第一个人开始报数,报数3的人退出圈子,下一个人从1开始重新报数,报数3的人退出圈子。
如此循环,直到留下最后一个人。问留下来的人的编号。
#include<stdio.h>
void main()
{
int last(int a[],int n,int b[]);
int a[10000];
int n,i;
printf("Input n(n must be a natural number less than 10000):");
scanf("%d",&n);
if(n>10000||n<=0)
printf("%d is out of range of valid values.",n);
else
{
for(i=0;i<n;i++)
a[i]=i+1;
printf("Last No. is:%d\n",last(a,n));
}
}
int last(int a[],int n)
{
int int b[10000];
int i=0,j,k,m,temp,count=0;
while(n>3)
{
m=n%3;
i=0;
for(j=0;j<n;j++)
{
if((j+1)%3!=0)
{
b[i]=a[j];
i++;
}
}
for(j=0;j<=i;j++)
a[j]=b[j];
n=i+1;
for(j=1;j<=m;i++)
{
temp=a[i];
for(j=i;j>0;j--)
a[j]=a[j-1];
a[0]=temp;
}
}
return a[1];
}
c语言问题大家看看这个代码为什么会出现非法内存引用
答案:1 悬赏:60
解决时间 2021-01-30 15:41
- 提问者网友:独菊痴梦
- 2021-01-29 15:48
最佳答案
- 二级知识专家网友:情战凌云蔡小葵
- 2021-01-29 16:48
非法引用问题原因:这里i和j混用。
for(j=1;j<=m;i++) // 这里j为条件,但是i++。
{
temp=a[i];
for(j=i;j>0;j--)
a[j]=a[j-1];
a[0]=temp;
}
修改后,但是还是出现死循环,你的算法需要调整。
#include<stdio.h>
#define MAX_LEN 10000
void main()
{
int last(int a[],int n);
int a[MAX_LEN] = {0};
int n,i;
printf("Input n(n must be a natural number less than 10000):");
scanf("%d",&n);
if(n>MAX_LEN||n<=0)
printf("%d is out of range of valid values.",n);
else
{
for(i=0;i<n;i++)
a[i]=i+1;
printf("Last No. is:%d\n",last(a,n));
}
}
int last(int a[],int n)
{
int b[MAX_LEN] = {0};
int i=0,j,m,k,temp,count=0;
while(n>3)
{
m=n%3;
i=0;
for(j=0;j<n;j++)
{
if((j+1)%3!=0)
{
b[i]=a[j];
i++;
}
}
for(j=0;j<=i;j++)
a[j]=b[j];
n=i+1;
for(j=1;j<=m;j++)
{
temp=a[j];
for(k=j;k>0;k--)
a[k]=a[k-1];
a[0]=temp;
}
}
return a[1];
}
for(j=1;j<=m;i++) // 这里j为条件,但是i++。
{
temp=a[i];
for(j=i;j>0;j--)
a[j]=a[j-1];
a[0]=temp;
}
修改后,但是还是出现死循环,你的算法需要调整。
#include<stdio.h>
#define MAX_LEN 10000
void main()
{
int last(int a[],int n);
int a[MAX_LEN] = {0};
int n,i;
printf("Input n(n must be a natural number less than 10000):");
scanf("%d",&n);
if(n>MAX_LEN||n<=0)
printf("%d is out of range of valid values.",n);
else
{
for(i=0;i<n;i++)
a[i]=i+1;
printf("Last No. is:%d\n",last(a,n));
}
}
int last(int a[],int n)
{
int b[MAX_LEN] = {0};
int i=0,j,m,k,temp,count=0;
while(n>3)
{
m=n%3;
i=0;
for(j=0;j<n;j++)
{
if((j+1)%3!=0)
{
b[i]=a[j];
i++;
}
}
for(j=0;j<=i;j++)
a[j]=b[j];
n=i+1;
for(j=1;j<=m;j++)
{
temp=a[j];
for(k=j;k>0;k--)
a[k]=a[k-1];
a[0]=temp;
}
}
return a[1];
}
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯