现在,桌面上有9张正面向上的扑克。每次反动其中任意两张(包括已经翻过的牌)。使他们从一面向上变为另一面向上。这样一直下去。观察能否使所有的牌都反面向上?请用任意一种程序的方式证明你的结论。并在程序运行时告知你的证明思路。
#include <iostream>
using namespace std;
/*
现在,桌面上有9张正面向上的扑克。每次反动其中任意两张(包括已经翻过的牌)。
使他们从一面向上变为另一面向上。 这样一直下去。
观察能否使所有的牌都反面向上?请用任意一种程序的方式证明你的结论。并在程序运行时告知你的证明思路
*/
int main()
{
int heads[9]{1, 1, 1, 1, 1, 1, 1, 1, 1}; //表示刚开始都是正面
int head_sum = 0; //刚开始9张正面向上的和
int tall_sum = 0; //目标反面都向上的和
int sum = 0; //表示不同情况的差值
//思路:1表示正面; 翻动表示乘以一个-1; -1表示反面;
//每翻动任意两个sum的变化情况分别有:-4 ; +4 ;+0 ;
//通过任意组合变化情况,判断能否得到sum
for(int i=0; i<9; i++)
{
head_sum += heads[i];
tall_sum = tall_sum + heads[i] * (-1);
}
sum = head_sum - tall_sum;
if(sum % 4 == 0)
cout<<"有"<<endl;
else
cout<<"无"<<endl;
return 0;
}