一个传统的做法
  • 板块P1146 硬币翻转
  • 楼主mmeior
  • 当前回复4
  • 已保存回复4
  • 发布时间2022/1/24 00:16
  • 上次更新2023/10/28 11:22:33
查看原帖
一个传统的做法
661296
mmeior楼主2022/1/24 00:16

**利用二位数组把翻转硬币的过程初始化
输入n,易知翻转n次就可以得到答案
把二维数组的下三角全部变成1,翻转为反面,对应n次翻转硬币
再将奇数行的0和1全部对换
输出二维数组,即可得到正确答案**
如n=4时:
1000
1100
1110
1111
再奇数行0,1互换:
0111
1100
0001
1111

#include<stdio.h>
int main()
{
	int n, a[100][100];
	void reverse(int a[100][100], int n);
	void print(int a[100][100], int n);
	scanf("%d", &n);
	printf("%d\n", n);
	for (int i = 0; i < n; i++)//初始化
		for(int j=0;j<n;j++)
			a[i][j] = 0;
	reverse(a,n);//翻转硬币
	print(a, n);//输出
	return 0;
}
void reverse(int a[100][100], int n)
{
	int i;
	for (i = 0; i < n; i++)//每次翻转一个硬币
		for (int j = 0; j <= i; j++)
			a[i][j] = 1;
	for (int j = 0; j < n; j+=2)//将奇数行0,1互换
	{
		for (int k = 0; k < n; k++)
		{
			if (a[j][k] == 0)
				a[j][k] = 1;
			else
				a[j][k] = 0;
		}
	}
}
void print(int a[100][100], int n)
{
	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j < n; j++)
			printf("%d", a[i][j]);
		printf("\n");
	}
}
2022/1/24 00:16
加载中...