| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 533 人关注过本帖
标题:C程诚意求解
只看楼主 加入收藏
唯我独魔
Rank: 8Rank: 8
等 级:蝙蝠侠
帖 子:176
专家分:782
注 册:2011-4-13
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:3 
C程诚意求解
不知道为什么运行出错,诚意求解
Description
n 个人站成一排, 并依次编号1~n,。从编号为1 的人开始,按顺时针方向每隔一人选出一个,剩下的人重新围成一圈,如此循环直到剩下两人,这剩下的两人就是幸运儿。如果你想成为最后两个幸运儿,请问开始时应该站在什么位置?(设3<=n<=50)
Input
开始时的人数n
Output
第1 行是选出顺序,第2 行是两名幸运儿的开始位置(按升序排列),位置编号之间用一个空格分开。
Sample Input
12
20
45
Sample Output
2 4 6 8 10 12 3 7 11 5
1 9
2 4 6 8 10 12 14 16 18 20 3 7 11 15 19 5 13 9
1 17
2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 3 7 11 15 19 23 27 31 35 39 43 5 13 21 29 37 45 9 25 41 17
1 33

下面是我编译的一个程序,但是运行出错,求问
#include<stdio.h>
#include<stdlib.h>
void search(int*k);
int main(void)
{
int team[50];
int i=0,n;
scanf("%d",&n);
for(;i<n;i++)
   team[i]=i+1;
 while(team[2]!=0)
    search(team);//剔除一排中不符的人
 printf("\n%d %d",team[0],team[1]);
 return 0;
}
void search(int*k)
{
k=(int*)malloc(50*sizeof(int));
int m=0;
int n=1;
int i,j;
for(;k[m]!=0;m++);//找到数组内第m个为0,说明一排内有m个人
while(n<m)//选出人的编号
{
 printf("%d ",k[n]);
 n+=2;
}
n=1;
while(n<m)//将选出位置重置为0
{
  k[n]=0;
n+=2;
}
for(i=1,j=2;k[j]!=0;)//形成新的一排
{
 k[i]=k[j];
 k[j]=0;
 i++;
 j+=2;
}
free(k);
}
搜索更多相关主题的帖子: 顺时针 幸运儿 
2011-04-21 19:27
唯我独魔
Rank: 8Rank: 8
等 级:蝙蝠侠
帖 子:176
专家分:782
注 册:2011-4-13
收藏
得分:0 
回复 楼主 唯我独魔
急求高手啊!
2011-04-21 20:10
voidx
Rank: 12Rank: 12Rank: 12
来 自:邯郸
等 级:火箭侠
帖 子:1250
专家分:3538
注 册:2011-4-7
收藏
得分:20 
懒得帮你看了,不如你看这个吧
程序代码:
#include <stdio.h>
#include <string.h>

int main() {
    char i = 2, j = 1, k = 0, a[51] = { 0 };
    int n;
    scanf("%d", &n);
    a[2] = 1;
    printf("2 ");
    while (j < n - 2) {
        for (; i <= n; i++) {
            if (!a[i]) {
                k++;
            }
            if (k == 2) {
                printf("%d ", i);
                k = 0;
                a[i] = 1;
                j++;
            }
        }
        i = 1;
    }
    printf("\n1 ");
    for (i = 2; a[i]; i++);
    printf("%d ", i);
    return 0;
}
2011-04-21 20:53
唯我独魔
Rank: 8Rank: 8
等 级:蝙蝠侠
帖 子:176
专家分:782
注 册:2011-4-13
收藏
得分:0 
回复 3楼 voidx
已经解决
#include<stdio.h>
void search(int*k);
int main(void)
{
int team[50]={0};
int i,n;
scanf("%d",&n);
for(;n!=0;)
{
 i=0;
for(;i<n;i++)
   team[i]=i+1;
 while(team[2]!=0)
    search(team);
 printf("\n%d %d\n",team[0],team[1]);
scanf("%d",&n);
}
 return 0;
}
void search(int*k)
{

int m=0;
int n=1;
int i,j;
for(;k[m]!=0;m++);
while(n<m)
{
 printf("%d ",k[n]);
 n+=2;
}
n=1;
while(n<m)
{
  k[n]=0;
n+=2;
}
for(i=1,j=2;k[j]!=0;)
{
 k[i]=k[j];
 k[j]=0;
 i++;
 j+=2;
}

}
2011-04-22 12:17
快速回复:C程诚意求解
数据加载中...
 
   



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

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