在生活中,條形碼經常用來標誌物品的信息。條形碼是由黑白相間的條組成的。條的寬度有兩種,我們可以認爲窄的代表0,寬的代表1。本題中設定寬條的寬度是窄條的兩倍。
現有一個條形碼掃描工具,可以得到條形碼每一條的寬度。你的任務是將這些寬度識別爲一個01串。
本來這是一個非常簡單的任務,可是由於在掃描的時候會有誤差,使得問題變得沒那麼簡單了。不過掃描工具得到的結果最多比真實值大或小5%。請你幫忙完成這個識別程序。已知條形碼中至少有一個是寬條,可能沒有窄條。
輸入
輸入第一行爲一個數字n(n<20),表示掃描出了n個條。
第二行爲n個正整數,均不大於10^8。
輸出
輸出爲一個長度爲n的01串,寬條對應1,窄條對應0。如果有些條偏差的超過了限制,輸出“Bad Barcodes”
Sample Input1
4
95 105 190 210
Sample Output1
0011
Sample Input2
4
94 105 190 210
Sample Output2
Bad Barcodes
沒啥解釋的
#include<stdio.h>
#include<string.h>
#define INF 100000008;
int a[100];
int a1[100], a2[100];
int main()
{
double max1,min1, max2,min2;
max1 = 0;max2 = 0;min1 = INF;min2 = INF;
int n, i, j;
scanf("%d", &n);
for (i = 1;i <= n;i++)
{
scanf("%d", &a[i]);
if (a[i] < min1)
min1 = a[i];
if (a[i] > max2)
max2 = a[i];
}
for (i = 1;i <= n;i++)//分成兩堆
{
if (a[i] > 1.5*min1)
a2[i] = 1;
else a1[i] = 1;
}//
for (i = 1;i <= n;i++)
{
if (a1[i])
{
if (a[i] > max1)
max1 = a[i];
}
if (a2[i])
{
if (a[i] < min2)
min2 = a[i];
}
}
int flag = 0;
if (max1 - min1 / 0.95*1.05>0.0001)
flag = 1;
if (max2 - min2 / 0.95*1.05>0.0001)
flag = 1;
if (max1 - min2 / 2 / 0.95*1.05>0.0001)
flag = 1;
if (max2 / 2 - min1 / 0.95*1.05>0.0001)
flag = 1;
int flagk=0;
for(i=1;i<=n;i++)
{
if(a2[i])
flagk=1;
}
if(!flagk&&!flag)
{
for(i=1;i<=n;i++)
printf("1");
printf("\n");
return 0;
}
if (flag)
printf("Bad Barcodes");
else
{
for (i = 1;i <= n;i++)
{
if (a1[i])
printf("0");
if (a2[i])
printf("1");
}
}
printf("\n");
}