A.n / 2
B.n
C.n(n-1) / 2
D.n(n-1)
问题描述:现有n种不同形状的宝石,每种n颗,共n颗.同一种形状的n颗宝石分别具有n种不同的颜色中的一种颜色.欲将这n2颗宝石排列成n行n列的一个方阵,使方阵中每行和每列的宝石都存n种不同形状和n种不同颜色.试设计一个算法,计算出对于给定的,有多少种不同的宝右排列方案.
算法设计:对于给定的n计算出不同的宝石排列方案数.
数据输入:由文件input.txt给出输入数据.第1行有1个正整数n(0<n<9).
结果输出:将计算的宝石排列方案数输出到文件output.txt.
[说明]
设一个环上有编号为0~n-1的n粒颜色不尽相同的珠子(每粒珠子颜色用字母表示,n粒珠子的颜色由输入的字符串表示)。从环上的某两粒珠子间剪开,则环上珠子形成一个序列然后按以下规则从序列中取走珠子:首先从序列左端取走所有连续的同色珠子;然后从序列右端在剩下的珠子中取走所有连续的同色珠子,两者之和为该剪开处可取走珠子的粒数。在不同位置剪开,能取走的珠子也不尽相同。
本程序所求的是在环上哪个位置剪开,按上述规则可取走的珠子粒数最多。程序中用数组存储字符串。例如:10粒珠子颜色对应字符串为“aaabbbadcc”,在0号珠子前剪开,序列为aaabbbadcc,从左端取走3粒a色珠子,从右端取走2粒c色珠子,共取走5粒珠子。若在3号珠子前剪开,即bbbadccaaa,共取走6粒珠子。
[C函数]
int count(char*s,int start,int end)
{inti,c=0,color=s[start],step=(start>end)?-1:1;
for(i=start;s[i]==color;i+=step){
if(step>0 && i>end || (1) ) break;
(2) ;
}
return c;
}
void main()
{ char t,s[120];
int i,j,C,len,maxc,cut=0;
printf("请输入环上代表不同颜色珠子字符串:");
scanf("%s",s );
len=strlen(s);
for(i=maxc=0;i<len;i++){ /*尝试不同的剪开方式*/
c=count(s,0,len-1);
if(c<len) C+=count((3));
if(c>maxc){cut=i;maxc=c; )
/*数组s的元素循环向左移动一个位置*/
t=s[0];
for(j=1;i<len;i++) (4);
(5);
}
printf("在第%d号珠子前面剪开,可以取走%d个珠子.\n",cut,maxc);
}
设c是某(n,k)的线性分组码的一个码字(非全零码字)。 (1)若向量h和c正交,即chT=0,那么这样的h最多有多少种不同?(不包括全零向量) (2)若要求h和所有可能的编码结果都正交,这样的h有多少种不同?(不包括全零向量)
设寄信需要邮票n分,以1分,2分,4分四种邮票黏贴在一系列的位置上(不同的排列方式以不同方法计),问有多少种不同方法?
为了保护您的账号安全,请在“简答题”公众号进行验证,点击“官网服务”-“账号验证”后输入验证码“”完成验证,验证成功后方可继续查看答案!