纸杯猜数(C++制作)
你和小明正在玩纸杯猜数游戏。
小明在桌面上扣放了一排 n 个纸杯, 依次标号为 1~n。 每个纸杯内侧写有一个数字。
小明先将每个纸杯上的数字告诉小明, 然后他快速的进行了如下 m 次交换操作:
选择两个纸杯 u 和 v, 交换他们的位置。 (u 和 v 相同表示本次不交换)
现在小明想让你回答: m 次操作后依次排列的纸杯上的数字分别是多少。
第一行输入两个数 n,m, 分别表示纸杯数、 操作次数(1<=n,m<=50000)
第二行输入 n 个数, 分别表示每个纸杯内测的数字之后 m 行, 每行两个数 u,v, 表示将这两个纸杯交换
输出一行 n 个数, 表示交换后每个纸杯内测的数字依次是多少。 以空格隔开
输入
8 3
1 4 7 20 5 3 11 6
3 7
2 6
5 3
输出
1 3 5 20 11 4 7 6
可以获取n,m,以及各纸杯内的数字存入数组后,再进行m轮交换纸杯的操作,最后再输出纸杯内的数字即可。
代码如下:
参考链接:
#include <iostream>
using namespace std;
int main(void){
// https://oj.qdturing.cn/d/A1002/p/51NODP446
int n,m;
int arr[50000]; // 存储最多50000个整数的int数组
int i=0;
int u,v;
cin>>n>>m; // 从输入获取n和m的值
// 获取n个整数存入数组arr中
for(int i=0;i<n;i++){
cin>>arr[i];
}
// 进行m轮 交换纸杯的操作
while(i<m){
cin>>u>>v; // 获取要交换纸杯的标号
// 交换纸杯
int temp = arr[u-1];
arr[u-1]=arr[v-1];
arr[v-1]=temp;
i++; // 交换纸杯的次数+1
}
// 打印结果
for(int i=0;i<n;i++){
cout<<arr[i]<<" ";
}
}
【以下回答由 GPT 生成】
这个问题可以通过模拟纸杯交换的过程来解决。你可以按照以下步骤编写一个C++程序:
首先,从标准输入读取纸杯的个数n和交换操作的次数m。
创建一个整数数组cup,用来存储纸杯上的数字。然后从标准输入读取n个数字并依次存储到数组cup中。
创建一个for循环来模拟m次交换操作。每次循环中,从标准输入读取两个纸杯编号u和v,然后交换纸杯u和v的数字。注意,数组索引是从0开始的,所以需要将输入的纸杯编号减1。
执行完所有的交换操作后,输出cup数组中的数字。注意,输出结果时,纸杯的编号是从1开始的,所以需要将数组索引加1。
以下是一个可能的C++程序示例:
#include <iostream>
using namespace std;
void swap(int& a, int& b) {
int temp = a;
a = b;
b = temp;
}
int main() {
int n, m;
cin >> n >> m;
int* cup = new int[n];
for (int i = 0; i < n; i++) {
cin >> cup[i];
}
for (int i = 0; i < m; i++) {
int u, v;
cin >> u >> v;
swap(cup[u-1], cup[v-1]);
}
for (int i = 0; i < n; i++) {
cout << cup[i] << " ";
}
cout << endl;
delete[] cup;
return 0;
}
你可以将上面的代码保存为一个名为"cup_guess.cpp"的文件,并通过C++编译器来编译和运行该程序。
【相关推荐】