中易网

c语言问题大家看看这个代码为什么会出现非法内存引用

答案:1  悬赏:60  
解决时间 2021-01-30 15:41
有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];
}
最佳答案
非法引用问题原因:这里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];
}
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
中午泡柠檬水喝下午又泡红枣枸杞子喝有什么副
居民家庭户口有城镇和农村之分吗?分得到土地
“忘记你比爱你更不容易”是那里的歌词
olay淡斑小白瓶怎么用,新入手了一瓶,急急急
为什么我的war thunder总是在获取跟新信息
鳞癌分化较差是什么意思
素描画油了是什么原因
电容的区别
全新明锐1.6升和全新英朗1.5升哪个好
x~ln(1+x)
最近想装修房子,感觉南通天河、名匠、水木清
学业水平考试没有通过3c,补考的题目会比之前
9月份住新房好曰子
初三语文半期总结
深海许梦的结局是什么
推荐资讯
为什么为什么为什么,我恨她
电动车爬坡时负极黑线烧焦是什么原因
请问无锡市里的印度餐厅在哪里?
三铬十三的淬火回火温度
湖南有什么有名的建筑物???!!!急急急急
一年365天 想给女朋友发365条信息 谁帮我!!
一个数加上35再减去28得于34这个数是多少怎么
灰壳全合成机油价格大概是多少?
怎么瘦大腿和臀部,像王俊凯那样的臀围
我和我老婆经营着一家小公司,公司的发展正在
房间里好多黑米虫怎样才能全部消灭
求教,拼音到底怎么学。都快初中毕业的人了,
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?