1. 程式人生 > >(新生賽)H。神奇老虎機

(新生賽)H。神奇老虎機

題目描述

不知道你有沒有玩過老虎機,現在小明面前有一臺神奇的老虎機,這臺機器有n個滾輪,從左往右數第i個滾輪包含1到a_i的整數(包括1和a_i)。在按下按鈕之後,所有的滾輪都會飛速旋轉,最終停下來,每個滾輪將顯示其中一個整數。這個過程是隨機的。小明有一個有趣的想法,如果將滾輪顯示的數字連線起來看做一長串字串的話,將會有非常多的可能,在這所有的可能中字典序最小的字串是哪個?(只能從左向右讀)

對於字典序的說明:
兩個字串S和T,從前往後比較,如果存在一個位置,在該位置兩個字串的字元不同,則比較小的那個所在的字串字典序更小。
例如: 123的字典序比14的小,因為在第二個位置上2小於4
12345的字典序比9的小
220的字典序比22的大,因為22是220的一個字首

輸入
一個整數t,表示有t組資料(1 <= t <= 100)
每組第一行為一個整數n表示老虎機有n個滾輪
(1 <= n <= 1000)
第二行為n個整數(a_1 a_2 …a_i …a_n )
表示第i個滾輪上的數字範圍(1~a_i)
(1 <= a_i <= 100)

輸出
每組輸入對應一行輸出,輸出字典序最小時老虎機滾輪上顯示的數字
兩個數字之間用空格隔開

樣例輸入
2
4
6 6 6 6
2
2 2

樣例輸出
1 1 1 1
1 1

提示
老虎機上顯示的數都不含前導0
比如:某一塊滾輪包含[1,33],如果它顯示"1"的話,顯示的是"1"而不是"01"

對於樣例2的解釋:
所有情況分別為:“1 1”、“1 2”、“2 1”、“2 2”
其中"1 1"是字典序最小的,所以答案為"1 1"

陷進坑裡去了。。。以為全輸出1就是最小的。。
看了大佬的題解以後明白了,除了在最後一位,優先選擇100、10,而最後一位為了防止前面的變成字首,不能要0,只能要1。

#include <stdio.h>
int main()
{
	int t;
	int n;
	int a;
	scanf("%d",&t);
	for(int i=1;i<=t;i++)
	{
		scanf("%d",&n);
		for(int j=
1;j<=n;j++) { scanf("%d",&a); if(j==n) printf("1\n"); else { if(a==100) printf("100 "); else if(a<10) printf("1 "); else printf("10 "); } } } return 0; }