| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 632 人关注过本帖
标题:求解两个C语言书上的练习题(知道的请提示一下)
取消只看楼主 加入收藏
yahoo12345
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2006-4-10
收藏
 问题点数:0 回复次数:0 
求解两个C语言书上的练习题(知道的请提示一下)
问题如下: 有n个整数,使其前面各数顺序向后移m个位置,最后m个数变成最前面m个数。
写一个函数实现以上的功能,在主函数中输入n个整数,并输出调整后的n个数

我想直接计算 数组中的每个元素 移动m位置之后 但是原来的数组位置应该如何赋值
void Move(int array[20],int n,int m)
{
int *p,array_end;
int i;
p=array;
array_end=*(array+n-1);
if(i+m>n-1)
{
*(p+i+m-n)=*(p+i);
break;
}
else
{
*(p+i+m)=*(p+i);
break;
}


}
main()
{
int number[20],n,m,i;
printf("How many number");
scanf("%d",&n);
printf("Input %d numbers:\n",n);
for(i=0;i<n;i++)
{
printf("number[%d]=",i);
scanf("%d",&number[i]);
}
printf("\n Now print the number");
for(i=0;i<n;i++)
{
printf("number[%d]=",i);
printf("%2d\t",number[i]);
}
printf("\nhow many you want to move?");
scanf("%d",&m);
Move(number,n,m);
printf("Now they are:\n");
for(i=0;i<n;i++)
{
printf("number[%d]=",i);
printf("%2d\t",number[i]);
};
}

问题二 有n个人围成一圈,顺序编号,从第一个开始报数(从1到3报数)凡是报到3的人退出圈子,问最后留下的是原来第几个的那位?

main()
{
int i,k,m,n,num[50],*p;
printf("input number of person:n=");
scanf("%d",&n);
p=num;
for(i=0;i<n;i++)
{
*(p+i)=i+1; /*以1至n为每个人编号*/
}
i=0; /*i为每次循环时的计数变量*/
k=0; /*k为按1 2 3 报数时的计数变量*/
m=0; /*退出人数*/
while(m<n-1) /*当退出人数比n-1少时(即未退出人数大于1时)执行循环体*/
{
if(*(p+i)!=0)
{
k++;
}
if(k==3)
{
*(p+i)=0; /*退出的人编号为0*/
k=0;
m++;
}
i++;
if(i==n)
{
i=0; /*报到尾后 i恢复为0*/
}


}
while(*p==0)
{
p++;
}
printf("The last one is No.%d\n",*p);
}
为什么报到尾后 i恢复为
if(i==n)
{
i=0; /*报到尾后 i恢复为0*/
}
求解更好的算法 谢谢
搜索更多相关主题的帖子: C语言 练习题 提示 求解 
2006-04-10 09:33
快速回复:求解两个C语言书上的练习题(知道的请提示一下)
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.020250 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved