(新生賽)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;
}