$题解 CF629A 【Far Relative’s Birthday Cake】 $

\(CF629A \ Far Relative’s Birthday Cake\)
一道简单的问题,我们一步一步来解决。


\[First:\text{输入} \]

输入十分简单,首先,\(cin>>n\),输入\(n\)之后,两重\(for\)循环,将题目所要输入的矩阵输进去,像这样\(↓↓↓\)

    for(int i=1;i<=n;i++)
     for(int j=1;j<=n;j++)
      cin>>ch[i][j];  

注意了,\(ch[][]\)应该是一个字符类型\((char)\)的数组


\[Second:\text{解决问题} \]

根据题意,\(C\)就是含有巧克力的细胞,我们可以用两个双重\(for\)循环,一遍遍历每一个竖列,一遍遍历每一个横列。,用\(c\)来表示一共有几对巧克力的细胞,\(t\)来表示“家庭之门”幸福感的价值,根据

\[\text{当}c=1\text{时}\ ,t=0 \]

\[\text{当}c=2\text{时}\ ,t=1 \]

\[\text{当}c=3\text{时}\ ,t=3 \]

\[\text{当}c=4\text{时}\ ,t=6 \]

\[\text{当}c=5\text{时}\ ,t=10 \]

根据数学方法,可得\(\huge t=\frac{c\times(c-1)}{2}\)应为要统计每一行/列\(t\)的个数,所以,可用以下方法遍历矩阵\(↓↓↓\)

    for(int i=1;i<=n;i++)
	{
		c=0;   //初始化
		for(int j=1;j<=n;j++)
		{
			if(ch[i][j]=='C')
			c++;
		}
		t+=(c*(c-1))/2;  //更新t的值
	}
	for(int j=1;j<=n;j++)
	{
		c=0;   //初始化
		for(int i=1;i<=n;i++)
		{
			if(ch[i][j]=='C')
			c++;
		}
		t+=(c*(c-1))/2;  //更新t的值
	}

最后\(cout<<t\)即可。


\(My \ complete \ code:\)

#include <bits/stdc++.h>
using namespace std;
int main()
{
	int n,t=0,c=0; //初始化
	char ch[105][105];
	cin>>n;
	for(int i=1;i<=n;i++)
	 for(int j=1;j<=n;j++)
	  cin>>ch[i][j];   //输入
	for(int i=1;i<=n;i++)
	{
		c=0;
		for(int j=1;j<=n;j++)
		{
			if(ch[i][j]=='C')
			c++;
		}
		t+=(c*(c-1))/2;
	}            //横向遍历
	for(int j=1;j<=n;j++)
	{
		c=0;
		for(int i=1;i<=n;i++)
		{
			if(ch[i][j]=='C')
			c++;
		}
		t+=(c*(c-1))/2;
	}          //竖向遍历
	cout<<t;
}
posted @ 2019-08-03 19:01  Luke·Skywalker  阅读(191)  评论(0)    收藏  举报