c语言程序:插队问题?

c语言程序:插队问题?,第1张

#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 = 9i >= 0--i) {

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

      else break

  }

  a[i+1] = b

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

}

#include<stdio.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-1i>=0&&a[i]>xi--)

a[i+1]=a[i]

a[i+1]=x

n++

for(i=0i<ni++)

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

printf("\n")

return 0

}

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

我得思路是这样的,这道题其实就是维护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

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11046301.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-13
下一篇 2023-05-13

发表评论

登录后才能评论

评论列表(0条)

保存