ZOJ_1178_Booklet Printing

Posted on 2010-10-18 17:05 李东亮 阅读(143) 评论(0)  编辑 收藏 引用 所属分类: acm

ZOJ 1178 Booklet Printing

       这道题是一道简单的模拟题,但是做起来有点繁琐,不仅处理过程繁琐,输出也繁琐。这个问题大意是打印文章,双面打印,一面打印两页,给定页数,然后输出每页纸打印的页码。要求这些纸放在一起,从中间折叠后,页码连续递增。找两张纸一试就知道怎么回事了。用front[0]front[1]分别表示正面打印的页码数,back[0]back[1]表示背面打印的页码数。对于4页的文章,毫无疑问front[1] = 1;back[0]=2;back[1]=3;front[0]=4。在输出的时候back与冒号之间有空格,而front与冒号之间无空格,开始还以为是题目打错了,自作聪明的该了下,提交就WA了,后来改过来一看,原来是多打个空格是因为frontback多个字母,为了对齐好看。需要注意的是首页或者最后一页有可能有空白页,需要额外处理。

       参考代码如下:

#include <stdio.h>
#include 
<stdlib.h>
#include 
<string.h>
struct node
{
    
int front[2];
    
int back[2];
}a[
25];

int main(void)
{
    
int n;
    
int i;
    
int pages;
    
int t;
    
while (scanf("%d"&n) != EOF && n != 0)
    {
        pages 
= n/4;
        
if (n%4 != 0)
            
++pages;
        t 
= 0;
        memset(a, 
0sizeof(a));
        
for (i = 0; i < pages-1++i)
        {
        
            
++t;
            a[i].front[
1= t;
            
++t;
            a[i].back[
0= t;
        }
        
if (n > t)
        {
            
++t;
            a[i].front[
1= t;
        }
        
if (n > t)
        {
            
++t;
            a[i].back[
0= t;
        }
        i 
= pages - 1;
        
while (n > t+1)
        {
            
++t;
            a[i].back[
1= t;
            
++t;
            a[i].front[
0= t;
            
--i;
        }
        
if (n > t)
        {
            
++t;
            a[i].back[
1= t;
        }
        
if (n > t)
        {
            
++t;
            a[i].front[
0= t;
        }
        printf(
"Printing order for %d pages:\n", n);
        
for (i = 0; i < pages-1++i)
        {
            printf(
"Sheet %d, front: ", i+1);
            
if (a[i].front[0== 0)
            {
                printf(
"%s, ""Blank");
            }
            
else
            {
                printf(
"%d, ", a[i].front[0]);
            }
            
if (a[i].front[1== 0)
            {
                printf(
"%s\n""Blank");
            }
            
else
            {
                printf(
"%d\n", a[i].front[1]);
            }
            printf(
"Sheet %d, back : ", i+1);
            
if (a[i].back[0== 0)
            {
                printf(
"%s, ""Blank");
            }
            
else
            {
                printf(
"%d, ", a[i].back[0]);
            }
            
if (a[i].back[1== 0)
            {
                printf(
"%s\n""Blank");
            }
            
else
            {
                printf(
"%d\n", a[i].back[1]);
            }
        }
        
if (a[i].front[0!= 0 || a[i].front[1!= 0)
        {
            printf(
"Sheet %d, front: ", i+1);
            
if (a[i].front[0== 0)
            {
                printf(
"%s, ""Blank");
            }
            
else
            {
                printf(
"%d, ", a[i].front[0]);
            }
            
if (a[i].front[1== 0)
            {
                printf(
"%s\n""Blank");
            }
            
else
            {
                printf(
"%d\n", a[i].front[1]);
            }
        }
        
if (a[i].back[0!= 0 || a[i].back[1!= 0)
        {
            printf(
"Sheet %d, back : ", i+1);
            
if (a[i].back[0== 0)
            {
                printf(
"%s, ""Blank");
            }
            
else
            {
                printf(
"%d, ", a[i].back[0]);
            }
            
if (a[i].back[1== 0)
            {
                printf(
"%s\n""Blank");
            }
            
else
            {
                printf(
"%d\n", a[i].back[1]);
            }
        }
    }
    
return 0;
}


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


posts - 12, comments - 1, trackbacks - 0, articles - 1

Copyright © 李东亮