永发信息网

看看这个程序哪里有错(在VS2010中C++编的)

答案:4  悬赏:60  手机版
解决时间 2021-11-20 09:23
  • 提问者网友:焚苦与心
  • 2021-11-19 14:07
看看这个程序哪里有错(在VS2010中C++编的)
最佳答案
  • 五星知识达人网友:罪歌
  • 2021-11-19 15:44
#include
void killed(int m,int n,int a[20],int i);//在主函数之前定义一下。
全部回答
  • 1楼网友:慢性怪人
  • 2021-11-19 17:37
#include
void killed(int m, int n, int a[20], int i);//声明
void main()
{
int m, n, a[20], i;
scanf("%d", &m);
printf(" ");
scanf("%d", &n);
for (i = 0; i a[i] = i + 1;
i = 0;
killed(m, n, &a[20], i);
scanf("%d", &a);
}
void killed(int m, int n, int a[20], int i)
{
int h = n;
for (; h>1;)
{
if (i + n > m - 1)
i = n - m - i;
else
i = i + m;
for (; a[i] == 0;)
{
i++;
if (i == m)
i = 0;
}
printf("a[%d] was killed ", i);
h = h - 1;
}
}
  • 2楼网友:神也偏爱
  • 2021-11-19 17:07
首先程序有个bug
for(i=0;i其次
killed(m,n,&a[20],i);//函数传值是值传递,传数组传的是地址,20什么也不是
=> killed(m,n,&a,i)
void killed(int m,int n,int a[20],int i)
=>void killed(int m,int n,int a[],int i)
最后函数使用要先声明
回去把谭浩强的书再看看吧。虽然大家都在吐槽这本书,但是人家的基础知识说得很详细,这是不争的事实
  • 3楼网友:duile
  • 2021-11-19 16:08
#include
int killed(int m,int n,int a[20]);//函数声明
void main()
{
int m,n,a[20]={0},i;

scanf("%d",&m);
scanf("%d",&n);

for(i=0;i a[i]=i+1;

i=killed(m,n,a); //返回值为最后剩下的元素的下标
printf("%d ",a[i] ); //输出最后一个剩下的值
}
int killed(int m,int n,int a[20])
{
int h=n,i=0;
int x=0; //定义一个计数器
for(;h>1;)
{
if ( a[i] != 0 ) //该位置数不为0,则进行累加
{
x++ ;
if ( x==m ) //到了出列的数,则结束本轮报数
{
printf("%d was killed ",a[i]);
a[i]=0;//出列数,置为0
h=h-1;
x=0;
}
}
i++;
if(i==n) //超过最大数,从头重来
i=0;
}
for(i=0;i if ( a[i] )
break;
return i;
}
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯