您的位置:

c语言数组插队问题,插队问题C语言

本文目录一览:

c语言程序:插队问题:有一个10个人的队伍,他们的身高分别为:1.73,1.75,1.7

#includestdio.h

int main()

{

float x=1.82,a[10]={1.73,1.75,1.78,1.84,1.88,1.89,1.90};

int i,j,n=7;

for(i=n-1;i=0a[i]x;i--)

a[i+1]=a[i];

a[i+1]=x;

n++;

for(i=0;in;i++)

printf("%.2f ",a[i]);

printf("\n");

return 0;

}

c语言程序:插队问题?

#include stdio.h

int main()

{

  float a[11] = {

      1.73,1.75,1.78,1.81,1.84,1.87,1.88,1.88,1.89,1.90

  };

  float b = 1.82;

  int i;

  for(i = 9; i = 0; --i) {

      if(a[i] b) a[i+1] = a[i];

      else break;

  }

  a[i+1] = b;

  for(i=0;i11;++i) printf("%.2f ", a[i]);

}

急求插队问题的C语言描述

这题真麻烦,终于写完了。

我得思路是这样的,这道题其实就是维护2个队列。

我把每个组的人当成一个人,而这些人排队就可以看成组与组之间的排队,这是第一个队列,也就是gqueue

然后每个组也都是一个队列,里面顺序排着每个组的人。

描述完成了,然后就是进队出队的问题了。

进队时首先查看自己所在的组有没有在gqueue中,team_in数组保存了每个组在gqueue中的位置,当然一开始都是-1,表示没有入队。如果自己的组在gqueue中,那么就直接加入自己所在组的队列中。如果没有自己的组,就让他所代表的组入gqueue。

出队时出gqueue中第一个组的第一个人,判断一下这个组是不是没有人了,要是没有人了就把这个组dequeue。

大概思路就是这样,还有要注意的就是我用h_table存储哈西表,代表着每个人所在的组的编号,这样把人名shash以下就可以知道他所处的组。

#include stdio.h

#include string.h

struct person

{

        char name[ 5 ];

        int team;

};

struct pqueue //组内队列

{

        person p[ 1001 ];

        int head, tail;

};

struct gqueue //组队列

{

        pqueue pq[ 1001 ];

        int head, tail;

};

int n, h_table[ 100000 ], team_in[ 1001 ];

gqueue q;

void p_enqueue ( person a, pqueue q )

{

        q.p[ q.tail ] = a;

        q.tail++;

        if ( q.tail == 1001 )

                q.tail = 0;

}

void g_enqueue ( person a, gqueue q )

{

        if ( team_in[ a.team ] != -1 )

                p_enqueue( a, q.pq[ team_in[ a.team ] ] );

        else

        {

                q.pq[ q.tail ].head = 0;

                q.pq[ q.tail ].tail = 0;

                team_in[ a.team ] = q.tail;

                p_enqueue( a, q.pq[ q.tail ] );

                q.tail++;

                if ( q.tail == 1001 )

                        q.tail = 0;

        }

}

void p_dequeue( pqueue q )

{

        printf("%s\n", q.p[ q.head ].name );

        q.head++;

        if ( q.head == 1001 )

                q.head = 0;

}

person g_dequeue( gqueue q )

{

        int t = q.pq[ q.head ].p[ q.pq[ q.head ].head ].team;

        p_dequeue( q.pq[ q.head ] );

        if ( q.pq[ q.head ].tail == q.pq[ q.head ].head )

        {

                team_in[ t ] = -1;

                q.head++;

                if ( q.head == 1001 )

                        q.head = 0;

        }

}

int shash( char *key )

{

        unsigned long h = 0;

        while( *key )

        {

                h = ( h  4 ) + *key++;

                unsigned long g = h  0Xf0000000L;

                if ( g ) h ^= g  24;

                h = ~g;

        }

        return h % 100000;

}

void init( )

{

        int i, j, t;

        person per;;

        for ( i = 0; i  n; i++ )

        {

                team_in[ i ] = -1;

                scanf("%d", t);

                for ( j = 0; j  t; j++ )

                {

                        scanf("%s", per.name);

                        per.team = i;

                        h_table[ shash( per.name ) ] = i;

                }

        }

        q.head = q.tail = 0;

}

void work( )

{

        char command[ 10 ];

        person per;

        while ( scanf("%s", command) != EOF )

        {

                if ( strcmp( command, "STOP" ) == 0 )

                        break;

                if ( strcmp( command, "DEQUEUE" ) == 0 )

                        g_dequeue( q );

                if ( strcmp( command, "ENQUEUE" ) == 0 )

                {

                        scanf("%s", per.name);

                        per.team = h_table[ shash( per.name ) ];

                        g_enqueue( per, q );

                }

        }

}

int main( )

{

        freopen("input.txt", "r", stdin);

        freopen("output.txt", "w", stdout);

        int time = 1;

        while ( scanf("%d", n) != EOF  n )

        {

                printf("Scenario #%d\n", time++);

                init( );

                work( );

        }

        return 0;

}

C语言排队插队问题以数字代表人数。例如输入12534,5插队了就输出数字1;654321,就是65432插队了,输出5

5插队了干嘛输出1,还有654321就是65432插队输出5,你想干嘛呀,说都说不清

C语言,用数组实现队列的入队,出队函数编程

这样的话应该符合你的要求:

#includestdio.h

void add(int queue[],int x);

int Top(int queue[]);

void del(int queue[]);

int end=0;

int main()

{

 int n;

 scanf("%d",n);//将要入队列n个元素

 int queue[1000];

 for(int i=1;i=n;i++)//输入n个元素

 {

  add(queue,i);//将i加入队列

 }

 //验证加入队列的元素,将队列中的元素按照输入的顺序输出:

 for( i=1;i=n;i++)

 {

  printf("%d ",Top(queue));//Top函数返回队头元素

  del(queue);//删除队头元素

 }

 //验证输出已经出队列后的队列(数组)元素:

 printf("\n");

 for(i=1;i=n;i++)

  printf("%d ",queue[i]);

 printf("\n");

 return 0;

}

void add(int queue[],int x)

{

    queue[++end]=x;

}

int Top(int queue[])

{

    return queue[1];//注意,这里的函数始终return queue[1];这里是和将普通数组中的元素输出最大的不同之处。!!!!!!

}

void del(int queue[])

{

    for(int i=2;i=end;i++)

 {

  queue[i-1]=queue[i];

 }

 queue=0;//将删除后的地方置0

 end--;

}

C语言模拟排队编程,急求完整答案

这个题有够无聊的,

不过这明显是个基础教学用PPT,是帮助理解的案例,不是用来考人的,

那这些模拟数字应该都是直接写入的吧:

//state1

int q[10];

//state2

q[0] = 9;

q[1] = 5;

q[2] = 2;

q[3] = 7;

//state3

q[4] = 6;

q[5] = 4;

//state4

for(int i = 0;i 4;i++){q[i] = q[i+2];}

q[4] = 0;q[5] = 0;

//state5

for(int i = 4;i = 3;i--){q[i] = q[i-1];}

q[4] = 3;

//state6

int k;

for(int i = 0;i = 4;i++){if(q[i] == 3){k = i;break;}}

//state7

for(int i = k;i 4;i++){q[i] = q[i+1];}

q[4] = 0;

//state8

for(int i = 0;i 4;i++){coutq[i];}