首页 > 代码库 > USTC OJ — 1005 Booklet Printing(找规律,简单题)

USTC OJ — 1005 Booklet Printing(找规律,简单题)

1. 题目描述

本题的描述比较凌乱,不过题目给出的测试数据比较好,可以推测出题目的意思。

下面是题目给出的测试数据:

2. 算法设计

每一张纸可以印4页,从第一张纸开始往后遍历,分别设置每张纸上需要印制的页码即可。

以第二组测试数据为例:

共需要印刷的页数n = 14,那需要的纸张数sheet_num = n / 4 + 1 = 4。

sheet_num = 4时,共可以印4*4 = 16页。实际只需要印14页,那就有两页空着,需要印上Black。

观察相邻的两页纸上印刷的页码,如下:

页码从前数1,2,。。。

 

页码从后数16,15,(前面两个>14,直接输出Black)14,。。。

 

每次循环一张纸(4个页码),如果当前第2张纸已经印刷完了,如下:

 

下面开始印刷第三张纸:

首先front: r_page = 12, l_page = 5   (r_page--, l_page++)

然后back:   l_page = 6  , r_page = 11 (r_page--, l_page++)

后面依次下去。。。

 

3. AC Code

 1 #include <stdio.h> 2  3 void ac_fun(int n); 4 int main() 5 { 6     int n; 7     // freopen("in.txt", "r", stdin); 8     while ( scanf("%d", &n) != EOF && 0 != n ) 9     {10         printf("Printing order for %d pages:\n", n);11         ac_fun(n);12     }13     return 0;14 }15 16 void ac_fun(int n)17 {18     int i;19     int l_page, r_page;20     int sheet_num;21     int l_board, r_board;22     if ( n % 4 == 0 )23         sheet_num = n / 4;24     else25         sheet_num = n / 4 + 1;26 27     l_board = 1;28     r_board = sheet_num * 4;29 30     // 从前往后,遍历每一张纸31     for ( i = 1; i <= sheet_num; i++ )32     {33         // sheet‘s front34         if ( r_board > n )35             l_page = 0;36         else37             l_page = r_board;38         r_page = l_board;39         l_board++;40         r_board--;41         if ( l_page == 0 )42             printf("Sheet %d, front: Blank, %d\n", i, r_page);43         else44             printf("Sheet %d, front: %d, %d\n", i, l_page, r_page);45         46         if ( r_page >= n ) break;47 48         // sheet‘s back49         if ( r_board > n  )50             r_page = 0;51         else52             r_page = r_board;53         l_page = l_board;54         l_board++;55         r_board--;56         if ( r_page == 0 )57             printf("Sheet %d, back : %d, Blank\n", i, l_page);58         else59             printf("Sheet %d, back : %d, %d\n", i, l_page, r_page);60     }61 }
View Code

 

USTC OJ — 1005 Booklet Printing(找规律,简单题)