中兴笔试题:更新单元信息问题

来源:互联网 发布:arm7 java 编辑:程序博客网 时间:2024/05/16 13:55

题目:八幢房屋组成的部落。以单元表示,排列成直线,每天每个单元都与他相邻的单元(邻居)竞争。整数值1表示一个活跃单元,数值0表示一个非活跃单元。如果相邻单元都活跃或者都不活跃,那么该单元第二天的状态为不活跃;否则为活跃、部落两端的单元都只有一个邻居单元,我们假设另一个邻近单元一直处于不活跃状态。即使更新单元状态后,要考虑之前的状态以更新其他单元状态。应更新所有单元的单元信息。

编写一个算法,求出给定天数后所有单元的状态。

测试用例:

input1: 1,0,0,0,0,1,0,0    day:1

0,1,0,0,1,0,1,0


input2:1,1,1,0,1,1,1,1   day:2

0,0,0,0,0,1,1,0

第一种:

#include<iostream>using namespace std;int *next_arr(int &day, int arr[]);int main(){int k, day;int arr[8];cout << "请输入现在的状态: ";for (int i = 0; i < 8; ++i){cin >> k;arr[i] = k;}cout << endl << "请输入查询的天数: ";cin >> day;int *arr_day=next_arr(day, arr);cout << endl << " 将来的活跃状态 : ";for (int i = 0; i < 8; ++i){cout << arr_day[i] << " ";}cout << endl;system("pause");}int *next_arr(int &day, int arr[]){int temp[8];int n = 0;for (int j = 0; j < day; ++j){for (int i = 0; i < 8; ++i){switch (i){    case 0:    temp[i] = arr[i + 1] ^ n;break;case 1:case 2:case 3:case 4:case 5:case 6:temp[i] = arr[i - 1] ^ arr[i + 1];break;case 7:temp[i] = arr[i - 1] ^ n;break;}}for (int i = 0; i < 8; ++i){arr[i] = temp[i];}}int *arrresult = arr;return arrresult;}

第二种:

#include<iostream>using namespace std;void next_arr(int day,int arr[]);int main(){int k,day;int arr[8];cout << "请输入现在的状态: ";for (int i = 0; i < 8; ++i){cin >> k;arr[i] = k;}cout << endl << "请输入查询的天数: ";cin >> day;next_arr(day, arr);cout << endl;system("pause");}void next_arr(int day,int arr[]){int temp[8];int n = 0;for (int j = 0; j < day; ++j){for (int i = 0; i < 8; ++i){if (i == 0){temp[i] = arr[i + 1] ^ n;}else if (i == 7){temp[i] = arr[i - 1] ^ n;}elsetemp[i] = arr[i - 1] ^ arr[i + 1];}for (int i = 0; i < 8; ++i){arr[i] = temp[i];}}cout << endl<<" 现在的活跃状态 : ";for (int i = 0; i < 8; ++i){cout << arr[i]<<" ";}}


3 0
原创粉丝点击