BIT2014級軟件學院程序設計-11 條形碼

在生活中,條形碼經常用來標誌物品的信息。條形碼是由黑白相間的條組成的。條的寬度有兩種,我們可以認爲窄的代表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");




}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章