
一道简单的c语言程序,跪求解答
设有n个人围坐一圈并按顺时针方向从1到n编号,从第s个人开始进行1到m的报数,报数到第m个人,此人出圈,再从他的下一个人重新开始1到m的报数,如此进行下去直到所有的人都出...
设有n个人围坐一圈并按顺时针方向从1到n编号,从第s个人开始进行1到m的报数,报数到第m个人,此人出圈,再从他的下一个人重新开始1到m的报数,如此进行下去直到所有的人都出圈为止。现要求按出圈次序,每10人一组,给出这n个人的顺序表。请编写一个完整的程序用函数Josegh()实现此功能
#include <stdio.h>
int main(void)
{
int a[100];
void Josegh(int a[]);
Josegh(a); /*调用函数Jpsegh()*/
return 0;
}
void Josegh(int a[])
{
int s,m,i,n,k,x,y,t,count=0;
printf("Enter n:");
scanf("%d",&n); /*输入n*/
for(i=0;i<=n;i++){
a[i]=(i+1);
i++;
}
t=n;
printf("Enter m:");
scanf("%d",&m); /*输入m*/
printf("Enter s:");
scanf("%d",&s); /*输入s*/
for(i=0;i<n;i++){
if(i=0){
if(m<=(n-s)){
printf("%d ",&a[s+m-1]);
for(k=a[s+m-1];k<t;k++)
a[s+m-1]=a[s+m];
x=s+m-1;
t--;
}
if(m>(n-s)&&m<n){
printf("%d ",&a[s+m-n-1]);
for(k=a[s+m-n-1];k<t;k++)
a[s+m-n-1]=a[s+m-n];
y=s+m-n-1;
t--;
}
if(m>=n){
m=m-n;
i--;
}
}
if(i>0){
if(x+m<=n){
printf("%d ",&a[x+m-1]);
for(k=a[x+m-1];k<t;k++)
a[x+m-1]=a[x+m];
t--;
}
if(m>(n-x)&&m<n){
printf("%d ",&a[x+m-1]);
for(k=a[x+m-1];k<t;k++)
a[x+m-1]=a[x+m];
t--;
}
if(m>=n){
m=m-n;
i--;
}
}
}
count++;
if(count%10==0)
printf("\n");
}
我这样做没有显示错误,但为什么不会出现结果,求大神解答 展开
#include <stdio.h>
int main(void)
{
int a[100];
void Josegh(int a[]);
Josegh(a); /*调用函数Jpsegh()*/
return 0;
}
void Josegh(int a[])
{
int s,m,i,n,k,x,y,t,count=0;
printf("Enter n:");
scanf("%d",&n); /*输入n*/
for(i=0;i<=n;i++){
a[i]=(i+1);
i++;
}
t=n;
printf("Enter m:");
scanf("%d",&m); /*输入m*/
printf("Enter s:");
scanf("%d",&s); /*输入s*/
for(i=0;i<n;i++){
if(i=0){
if(m<=(n-s)){
printf("%d ",&a[s+m-1]);
for(k=a[s+m-1];k<t;k++)
a[s+m-1]=a[s+m];
x=s+m-1;
t--;
}
if(m>(n-s)&&m<n){
printf("%d ",&a[s+m-n-1]);
for(k=a[s+m-n-1];k<t;k++)
a[s+m-n-1]=a[s+m-n];
y=s+m-n-1;
t--;
}
if(m>=n){
m=m-n;
i--;
}
}
if(i>0){
if(x+m<=n){
printf("%d ",&a[x+m-1]);
for(k=a[x+m-1];k<t;k++)
a[x+m-1]=a[x+m];
t--;
}
if(m>(n-x)&&m<n){
printf("%d ",&a[x+m-1]);
for(k=a[x+m-1];k<t;k++)
a[x+m-1]=a[x+m];
t--;
}
if(m>=n){
m=m-n;
i--;
}
}
}
count++;
if(count%10==0)
printf("\n");
}
我这样做没有显示错误,但为什么不会出现结果,求大神解答 展开
3个回答
展开全部
不知道是不是你想要的,代码如下:
#include <stdio.h>
#include <math.h>
int main(void)
{
int a[1000];
void Josegh(int a[]);
Josegh(a); /*调用函数Jpsegh()*/
return 0;
}
void Josegh(int a[])
{
int s,m,i,n,j,t;
int b[100][10]={0}, *fp;
fp=b[0];
printf("Enter n:");
scanf("%d",&n); /*输入n*/
for(i=0;i<=n;i++)
a[i]=(i+1);
t=n;
printf("Enter m:");
scanf("%d",&m); /*输入m*/
printf("Enter s:");
scanf("%d",&s); /*输入s*/
while(t>0)
{
i=s+m-1;
if(i>n-1)
i=i-n+1;
s=i+1;
*fp=a[i];
fp++;
t--;
}
t=n/10;
if(n%10!=0)
t++;
for(i=0;i<t;i++)
{
printf("\n第%d组: ",i+1);
for(j=0;j<10;j++)
{
if(b[i][j]!=0)
printf("%d\t",b[i][j]);
}
}
printf("\n");
}
运行结果如下:
展开全部
for(i=0;i<=n;i++){
a[i]=(i+1);
i++;
} 是不是这个 i 每次循环+2的原因?
a[i]=(i+1);
i++;
} 是不是这个 i 每次循环+2的原因?
更多追问追答
追问
刚刚试了,不是那个原因
但这也是处错误。。谢谢了
追答
printf("%d ",&a[s+m-1]); 把取地址符去掉试试。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你会单步调试吗?
更多追问追答
追问
不会。怎么弄
你可以帮我稍微修改下吗
追答
请自学单步调试。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询