设计算法 并用C语言描述 有没有大佬帮忙解答谢谢谢谢

2025-03-04 09:23:51
推荐回答(2个)
回答1:

#include 
void T1(int total,int out[]){
        int data[total*2+1];//最多只需要两倍的宽度即可
        int i,j;
        for(i=0;i                if(i                else data[i]=-1;

        }
        int o=0;
        int last=total;//最后指针,指向队尾后面的空位
        //打印当前队列情况
        for(j=0;j                if(data[j]!=-1)printf(" %d",data[j]);
        }
        printf("\n");
        //打印完毕
        int count=0;//序号
        for(i=0;i                if(data[i]!=-1){//尚未出列
                        count++;//当前序号加一
                        if(count % 2 == 1){//叫到1
                                out[o]=data[i];//出列
                                o++;//出列指针加一
                                data[i]=-1;//当前位置设为空,不能再被叫到
                        }
                        else{//叫到2
                                data[last]=data[i];//移到最后
                                last++;//最后指针指向下一个空位置
                                data[i]=-1;//当前位置设为空,不能再被叫到
                                //打印当前队列情况
                                for(j=0;j                                        if(data[j]!=-1)printf(" %d",data[j]);
                                }
                                printf("\n");
                                //打印完毕
                        }
                }
        }
}
main(int argc,char * argv[]){
        int total=10;
        int i;
        if(argc>1){
                total=atoi(argv[1]);
        }
        int out[total];
        T1(total,out);
        //打印出列顺序
        printf("出列顺序:");
        for(i=0;i                if(i>0)printf(",");
                printf("%d",out[i]);
        }
        printf("\n");
}

输出结果如下架设13个人的队列
 1 2 3 4 5 6 7 8 9 10 11 12 13
 3 4 5 6 7 8 9 10 11 12 13 2
 5 6 7 8 9 10 11 12 13 2 4
 7 8 9 10 11 12 13 2 4 6
 9 10 11 12 13 2 4 6 8
 11 12 13 2 4 6 8 10
 13 2 4 6 8 10 12
 4 6 8 10 12 2
 8 10 12 2 6
 12 2 6 10
 6 10 2
 2 10
 10
出列顺序:1,3,5,7,9,11,13,4,8,12,6,2,10

回答2:

题目呢?
具体要求啥?