1313 Booklet Printing

原创 2007年10月15日 08:26:00
Booklet Printing
Time Limit: 1000MS   Memory Limit: 10000K
Total Submissions: 861   Accepted: 451

Description
When printing out a document, normally the first page is printed first, then the second, then the third, and so on until the end. However, when creating a fold-over booklet, the order of printing must be altered. A fold-over booklet has four pages per sheet, with two on the front and two on the back. When you stack all the sheets in order, then fold the booklet in half, the pages appear in the correct order as in a regular book. For example, a 4-page booklet would print on 1 sheet of paper: the front will contain page 4 then page 1, and the back will contain page 2 then page 3.

 

Input
The input contains one or more test cases, followed by a line containing the number 0 that indicates the end of the file. Each test case consists of a positive integer n on a line by itself, where n is the number of pages to be printed; n will not exceed 100.

Output
For each test case, output a report indicating which pages should be printed on each sheet, exactly as shown in the example. If the desired number of pages does not completely fill up a sheet, then print the word Blank in place of a number. If the front or back of a sheet is entirely blank, do not generate output for that side of the sheet. Output must be in ascending order by sheet, front first, then back.

Sample Input

 

Sample Output

 

Source
Mid-Central USA 1998

 **************************************************************************************

***************************************************************************************

  • Source Code
    #include <iostream>
    using namespace std;
    struct page
    {
     int pageNum[4];
    };
    int main()
    {
     int totalPages,sheets;
     page pages[26];
     int i,p,ps,temp=0,back=0;
     while(1)
     {
      cin>>totalPages;
      if( totalPages==0 ) break;
      memset(pages,0,sizeof(pages));
      sheets=totalPages/4;
      if(totalPages%4!=0) sheets++;
      back=temp=ps=0;p=-1;
      for(i=1; i<=totalPages; i++)
      {
       if( i<=sheets*2 )
       {
        if(i%2==1) p++;  
        if(temp==0)
         pages[p].pageNum[1]=i;
        else
         pages[p].pageNum[2]=i;
        temp = (temp+1)%2;
        back=0;
       }
       else
       {
        if(back==0) { p++; back=1; }
        if( i%2==1 ) p--;
        if(temp==0)
         pages[p].pageNum[3]=i;
        else
         pages[p].pageNum[0]=i;
        temp = (temp+1)%2;
       }
      } 
      cout<<"Printing order for "<<totalPages<<" pages:"<<endl;
      for(i=0;i<sheets;i++)
      {
       if( (pages[i].pageNum[0]==0 && pages[i].pageNum[1]==0) )
        continue;
       cout<<"Sheet "<<i+1<<", front: ";
       if(pages[i].pageNum[0]!=0) cout<<pages[i].pageNum[0]<<", ";
       else cout<<"Blank, ";
       if(pages[i].pageNum[1]!=0) cout<<pages[i].pageNum[1]<<endl;
       else cout<<"Blank"<<endl;
    
       if( pages[i].pageNum[2]==0 && pages[i].pageNum[3]==0 )
        continue;
       cout<<"Sheet "<<i+1<<", back : ";
       if(pages[i].pageNum[2]!=0) cout<<pages[i].pageNum[2]<<", ";
       else cout<<"Blank, ";
       if(pages[i].pageNum[3]!=0) cout<<pages[i].pageNum[3]<<endl;
       else cout<<"Blank"<<endl;
      }
     }
     return 0;
    }
    
    
  • Printing order for 1 pages:
    Sheet 1, front: Blank, 1
    Printing order for 14 pages:
    Sheet 1, front: Blank, 1
    Sheet 1, back : 2, Blank
    Sheet 2, front: 14, 3
    Sheet 2, back : 4, 13
    Sheet 3, front: 12, 5
    Sheet 3, back : 6, 11
    Sheet 4, front: 10, 7
    Sheet 4, back : 8, 9
    Printing order for 4 pages:
    Sheet 1, front: 4, 1
    Sheet 1, back : 2, 3

    1
    14
    4
    0
    


    Front Back
    ------------- -------------
    | | | | | |
    | 4 | 1 | | 2 | 3 |
    | | | | | |
    ------------- -------------

    Your task is to write a program that takes as input the number of pages to be printed, then generates the printing order.

    获取windows8系统最高权限--system权限

     首先,大家需要了解下,目前win8的文件夹用户组获取权限的方法相对于win7来说,有了不少的改动,感觉更方便了。。。 目前不少人还觉得是administrator权限是系统的最高权限,其实不...
    • u011250851
    • u011250851
    • 2014年09月14日 09:45
    • 1352

    3D打印指南(二)

    3D打印机硬件:
    • CHS007chs
    • CHS007chs
    • 2014年04月24日 11:23
    • 1849

    metasploit针对性钓鱼攻击向量(BT5R3失败)

    root@bt:~# cd /pentest/exploits/set/ root@bt:/pentest/exploits/set# ./set Copyright 2012, The Social...
    • feier7501
    • feier7501
    • 2013年05月26日 23:09
    • 1912

    HRBUSTOJ 1313 火影忍者之~静音

    火影忍者之~静音   Time Limit: 1000 MS Memory Limit: 32767 K Total Submit:...
    • qq_37405320
    • qq_37405320
    • 2017年06月02日 23:39
    • 274

    wikioi 1313 质因数分解

    题目描述 Description 已知正整数 n是两个不同的质数的乘积,试求出较大的那个质数 。 输入描述 Input Description 输入只有一行,包含一个正整数 n。 输出...
    • u011386173
    • u011386173
    • 2015年01月24日 18:25
    • 455

    输出一个集合所有子集的元素和(Print sums of all subsets of a given set)

    原文地址:http://www.geeksforgeeks.org/print-sums-subsets-given-set/ Given an array of integers, print...
    • sinat_36246371
    • sinat_36246371
    • 2016年10月14日 15:22
    • 331

    洛谷1313 计算系数

    原题地址 题目描述 给定一个多项式(by+ax)^k,请求出多项式展开后x^n*y^m 项的系数。 输入输出格式 输入格式: 输入文件名为factor.in。 共一行,包含5 个整数,分别为 a ,b...
    • zero_from
    • zero_from
    • 2016年10月27日 14:27
    • 198

    【安装虚拟机和linux系统ubuntu14.04遇到的问题】

    1、已将虚拟机配置为使用64位客户机早做系统。无法执行64位的操作。 2、卡在:Starting cups-browsed - Bonjour remote printer browsing daem...
    • u013634684
    • u013634684
    • 2016年03月05日 14:28
    • 1716

    钻石图案的绘制(Diamond Printing Program)

    正准备费点脑力“调试”出钻石形状的输出算法,突然想到8年前已经干过这事了。 于是在CSDN中以“钻石”为关键词检索自己的文章,Bingo! 复用自己写的代码,节约的时间用来写这段心得,多好啊! ...
    • hpdlzu80100
    • hpdlzu80100
    • 2016年06月23日 16:11
    • 659

    Printing tools 自定义模板打印的实现

    安装完arcgis server 在站点的utilities 目录下有printing tools的gp服务,其下面有个export web map操作,通过这个gp服务可以实现对web 地图的打印。...
    • myyouthlife
    • myyouthlife
    • 2014年01月06日 15:36
    • 682
    内容举报
    返回顶部
    收藏助手
    不良信息举报
    您举报文章:1313 Booklet Printing
    举报原因:
    原因补充:

    (最多只允许输入30个字)