1. 程式人生 > >codeforces 1060a(思維水題)

codeforces 1060a(思維水題)

Let’s call a string a phone number if it has length 11 and fits the pattern “8xxxxxxxxxx”, where each “x” is replaced by a digit.

For example, “80123456789” and “80000000000” are phone numbers, while “8012345678” and “79000000000” are not.

You have n cards with digits, and you want to use them to make as many phone numbers as possible. Each card must be used in at most one phone number, and you don’t have to use all cards. The phone numbers do not necessarily have to be distinct.

Input
The first line contains an integer
n — the number of cards with digits that you have (1≤n≤100).

The second line contains a string of n digits (characters “0”, “1”, …, “9”) s1,s2,…,sn. The string will not contain any other characters, such as leading or trailing spaces.

Output
If at least one phone number can be made from these cards, output the maximum number of phone numbers that can be made. Otherwise, output 0.

Examples
inputCopy
11
00000000008
outputCopy
1
inputCopy
22
0011223344556677889988
outputCopy
2
inputCopy
11
31415926535
outputCopy
0
Note
In the first example, one phone number, “8000000000”, can be made from these cards.

In the second example, you can make two phone numbers from the cards, for example, “80123456789” and “80123456789”.

In the third example you can’t make any phone number from the given cards.
完全就是一道思維水題,想明白就好了。。有可能有5個8,但是可能就只能組成兩個電話號碼。所以就只能是2。但是呢,如果可以組成5組電話號碼,不過只有2個8,那也只能組成2個。找這之間的兩者的最小值就好了。
程式碼如下:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;

int n;
char s[101];

int main()
{
	while(scanf("%d",&n)!=EOF)
	{
		int count=0;
		scanf("%s",s); 
		for(int i=0;i<n;i++)
		{
			if(s[i]=='8') count++;
		}
		int ans=n/11;
		cout<<min(count,ans)<<endl; 
	}
	return 0;
}

多鍛鍊點思維,對a題有好處的。
努力加油a啊,(o)/~