【题目】一根长度为M厘米的木棍上有n只蚂蚁,每只蚂蚁要么朝左爬,要么朝右爬,速度为每秒1厘米。当两只蚂蚁对撞时,二者同时掉头(掉头时间忽略不计)。给出每只蚂蚁的初始位置和朝向,
- 文件名:[作业]
- 作者:〈漆黑〉
- 描述:〈 一根长度为M厘米的木棍上有n只蚂蚁,每只蚂蚁要么朝左爬,要么朝右爬,速度为每秒1厘米。当两只蚂蚁对撞时,二者同时掉头(掉头时间忽略不计)。给出每只蚂蚁的初始位置和朝向,计算T秒后每只蚂蚁的位置。〉
- 创建时间:2019.7.11
- 未完善
/****************************
* 文件名:[作业]
* 作者:〈漆黑〉
* 描述:〈一根长度为M厘米的木棍上有n只蚂蚁,每只蚂蚁要么朝左爬,要么朝右爬,速度为每秒1厘米。当两只蚂蚁对撞时,二者同时掉头(掉头时间忽略不计)。给出每只蚂蚁的初始位置和朝向,计算T秒后每只蚂蚁的位置。〉
* 创建时间:2019.7.11
****************************/
#include
using namespace std;
int main(){
int m, n, t, site;
//m长度,n个数,t时间,site位置
char direction;
//方向
cout << "请输入木棍长度(cm > 0):";
cin >> m;
int** ant = new int* [m + 1];
for (int i = 0;
i < m + 1;
i++)
ant[i] = new int[2];
for (int i = 0;
i < m + 1;
i++) {
for (int j = 0;
j < 2;
j++) {
ant[i][j] = 0;
}
}
cout << "请输入蚂蚁的数量:";
cin >> n;
for (int i = 0;
i < n;
i++) {
cout << "请输入第" << i + 1 << "只蚂蚁的位置和朝向(l/r):";
cin >> site >> direction;
ant[site][0] = 1;
if(direction == 'l') ant[site][1] = -1;
//-1朝左,1朝右
else if (direction == 'r') ant[site][1] = 1;
}
for (int i = 0;
i < m + 1;
i++) {//打印蚂蚁位置
cout << ant[i][0] << "\t";
}
cout << endl;
for (int i = 0;
i < m + 1;
i++) {//打印蚂蚁朝向
cout << ant[i][1] << "\t";
}
cout << endl;
cout << "请输入经过的时间:";
cin >> t;
for (int i = 0;
i < t;
i++) {//每秒的动作
for (int j = 0;
j < m + 1;
j++) {//0-m厘米一共m+1个整点
if (ant[j][0] == 1) {
if (ant[j][1] == -1 && j == 0) ant[j][1] = 1;
//最左边调头
else if (ant[j][1] == 1 && j == m) ant[j][1] = -1;
//最右边调头
if (ant[j][1] == -1 && j > 0 && ant[j - 1][0] == 0) {//左移
ant[j][0] = ant[j][1] = 0;
ant[j - 1][0] = 1;
ant[j - 1][1] = -1;
}else if (ant[j][1] == 1 && j < m && ant[j + 1][0] == 0) {//右移
ant[j][0] = ant[j][1] = 0;
ant[j + 1][0] = 1;
ant[j + 1][1] = 1;
j++;
}else if (ant[j][1] == 1 && j < m && ant[j + 1][0] == 1 && ant[j + 1][1] == -1) {//相撞,位置不变方向相反
ant[j][1] = -1;
ant[j + 1][1] = 1;
j++;
//下一个同时改变了跳过
}
}
}
}
for (int i = 0;
i < m + 1;
i++) {//打印蚂蚁位置
cout << ant[i][0] << "\t";
}
cout << endl;
for (int i = 0;
i < m + 1;
i++) {//打印蚂蚁朝向
cout << ant[i][1] << "\t";
}
cout << endl;
n = 1;
for (int i = 0;
i < m + 1;
i++) {
if (ant[i][0] == 1) {
cout << "第" << n << "只蚂蚁在" << i << "cm处" << endl;
n++;
}
}
}
【【题目】一根长度为M厘米的木棍上有n只蚂蚁,每只蚂蚁要么朝左爬,要么朝右爬,速度为每秒1厘米。当两只蚂蚁对撞时,二者同时掉头(掉头时间忽略不计)。给出每只蚂蚁的初始位置和朝向,计算T秒后每只蚂蚁的位置】
文章图片
推荐阅读
- 宽容谁
- 我要做大厨
- 增长黑客的海盗法则
- 画画吗()
- 2019-02-13——今天谈梦想()
- 远去的风筝
- 三十年后的广场舞大爷
- 叙述作文
- 20190302|20190302 复盘翻盘
- 学无止境,人生还很长