题目描述
DS 老师要买车了,但他现在很苦恼,因为他不知道选个什么样的吉祥车牌号码,为此,他专门召开了家庭会议,让大家提供认为吉祥的数字或字母,然后在买车的时候可以选择一个大家都满意的吉祥车牌号码。
湘潭目前的自选车牌号码的规则是: 1 )车牌号码前为地域标志“湘 C ”; 2 )车牌号码有 5 位,其中,第 1 、 4 、 5 位是数字(取值范围为 0 至 9 ),第 2 、 3 位是大写字母(取值范围为 A 至 Z )。
提供的内容要么是数字串,要么是字母串。数字串或字母串的长度均为 1 位或 2 位。注意: 1 )提供的数字串或字母串不会有相同的; 2 )长度为 2 的数字串或字母串在组成车牌号码时是不允许被其它字符隔开的。 3 )在组成车牌号码时,提供的吉祥数字或字母串不一定全部被使用,并允许重复使用。
请你根据提供的数字或字母串,编程求出可选车牌号码的方案总数。为了让大家理解题意,下面多举几个例子。
例 1 :提供的吉祥数字或字母组合为 2 6 88 DS 时,则车牌号码的组合形式为 xDSxx ,由于三个 x 均可取 2 或 6 ,而且第 2 、 3 个 x 位置上可选 88 ,故车牌号码的可选方案总共有 10 个。
例 2 : 2 6 8 DS 组成的车牌号码方案有 27 个。
例 3 : 2 6 88 DS 组成的车牌号码方案有 10 个。
例 4 : 2 6 88 D S 组成的车牌号码方案有 40 个。
例5:2 6 88 D S DS组成的车牌号码方案有40个。
输入
输入提供的各个吉祥数字串或字母串。
2 <=串的个数<= 10 ,每个串的串长为 1 或 2 。
串之间用一个空格隔开。
输出
只要是提供的吉祥数字串或字母串,都可以出现在车牌号码中(详细规则参考题目描述)。
统计可选车牌号码的方案总数,并输出之。
样例输入
2 6 88 D S
样例输出
40
#include<stdio.h>
#include<string.h>
int main()
{
char a[50], g[50], h[50],y[50],z[50];
int i,j,j1,k,k1,b,c,d,e,f,l,l1,n,s;
while (gets(a))
{
b = 0; c = 0; d = 0; e = 0; f = 0; l = 0; l1 = 0; n = 0;
for (k = 0,k1=0, j = 0,j1=0, i = 0; a[i] != '\0'; i++)
{
if (a[i] >= 'A'&&a[i] <= 'Z'&&a[i + 1] >= 'A'&&a[i + 1] <= 'Z') { g[j] = a[i]; g[j + 1] = a[i + 1]; j += 2; i = i + 1; b++; } // 记录两个连续的字母的个数
else if (a[i] >= '0'&&a[i] <= '9'&&a[i + 1] >= '0'&&a[i + 1] <= '9') { y[j1] = a[i]; y[j1 + 1] = a[i + 1]; j1 +=2; i = i + 1; c++; } // 记录两个连续的数字
else if (a[i] >= 'A'&&a[i] <= 'Z') { h[k] = a[i]; k++; d++; } // 记录单个字母的个数
else if (a[i] >= '0'&&a[i] <= '9') { z[k1] = a[i]; k1++; e++; } // 记录单个数字的个数
}
g[j] = '\0'; h[k] = '\0'; y[j1] = '\0'; z[k1] = '\0';
for (i = 0;g[i]!='\0';i+=2)
{
for (j = 0;h[j]!='\0'; j++)
{
if (h[j] == g[i]){ l = 1; break; }
}
if (l)
{
for (j = 0; h[j] != '\0'; j++)
{
if (h[j] == g[i + 1]){ f++; break; }
}
}
}
for (i = 0;y[i]!='\0'; i+= 2)
{
for (j = 0;z[j]!='\0'; j++)
{
if (z[j] == y[i]){ l1 = 1; break; }
}
if (l1)
{
for (j = 0;z[j]!='\0'; j++)
{
if (z[j] == y[i + 1]){ n++; break; }
}
}
}
s = e*(d*d-f+ b)*(e*e-n + c);
//puts(a);
printf("%d\n",s);
}
return 0;
}