问题描述 :
使用数组编程:
一群学生排成一行,输入一个位置,将该位置的学生移除。
第一个学生的位置为1,第n个学生的位置为n。
输入说明 :
第一行输入学生信息:
第一个整数n(0<=n<=100),表示共有n个学生,其后有n个整数,表示n个学生的学号
第二行及以后各行,每行输入一个整数,表示要移除的学生位置。
输出说明 :
每次移除一个学生后,在一行里输出完整的学号序列,学号之间以一个空格分隔。
如果需要移除学生的位置不合法,则输出“invalid”(不包括双引号)
如果移除学生后学号序列为空,则输出"empty"(不包括双引号)
输入范例 :
3 4 5 10
10
3
0
2
1
输出范例 :
invalid
4 5
invalid
4
empty
思路 :
无非就是移除学生之后将学生之后的数组元素向前搬运。
题解:
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <cmath>
#include <cstring>
#include <vector>
using namespace std;
int main()
{
int n;
int a[100000];
cin >> n;
int i;
for (i = 0; i < n; i++)
cin >> a[i];
int num;
while (cin >> num)
{
bool ok = 0;
if (n == 0)
{
cout << "invalid" << endl;
continue;
}
if (num > n || num < 1)
{
cout << "invalid" << endl;
}
else
{
for (i = num - 1; i < n; i++)
{
a[i] = a[i + 1];
}
n--;
if (n == 0)
{
cout << "empty" << endl;
continue;
}
else
{
for (i = 0; i < n - 1; i++)
{
cout << a[i] << " ";
}
cout << a[i] << endl;
}
}
}
return 0;
}