1. 冒泡法排序
【问题描述】使用冒泡法,对n个数从小到大排序 ,并输出需要多少轮比较
【输入形式】
【输出形式】
【样例输入】
5
1 2 5 4 3
【样例输出】
1 2 3 4 5
3
#include<iostream>
using namespace std;
int main()
{
int n;
cin >> n;
const int m = 100;
int arr[m];
for (int i = 0; i < n; i++)
{
cin >> arr[i];
}
bool finish = false;
int j = 1;
while (j < n && !finish)
{
finish = true;
for(int k=0;k<n-j;k++)
if (arr[k] > arr[k + 1])
{
swap(arr[k], arr[k + 1]);
finish = false;
}
j++;
}
for (int a = 0; a < n; a++)
cout << arr[a] << ' ';
cout << endl;
cout << j - 1;
return 0;
}
2. 选择排序
【问题描述】使用选择法对n个数从小到大排序,n由用户输入(n<100)
【输入形式】
【输出形式】
【样例输入】
4 5 2 3 1
【样例输出】
1 2 3 5
#include<iostream>
using namespace std;
int main()
{
const int m = 100;
int n;
cin >> n;
int arr[m];
int a = 0;
for (int i = 0; i < n; i++)
{
cin >> arr[i];
}
for (int j = 0; j < n; j++)
{
int tmp = arr[j];
for (int k=j; k < n; k++)
{
if (tmp > arr[k])
{
tmp = arr[k];
a = k;
swap(arr[j], arr[a]);
}
}
}
for (int i = 0; i < n; i++)
cout << arr[i] << ' ';
return 0;
}
3. 超过平均身高同学的人数
【问题描述】
给定n个同学的身高(均为100到200之间的正整数),求超过平均身高的同学人数。
【输入形式】
包括两行数据。
第一行包含一个整数n。
第二行包含n个用空格隔开的正整数。
【输出形式】
一行,这一行只包含一个整数,表示超过平均身高的同学人数。
【样例输入】
6 160 155 170 175 172 164
【样例输出】
3
#include<iostream>
using namespace std;
int main()
{
const int m = 10000;
int arr[m];
int n;
cin >> n;
for (int i = 0; i < n; i++)
{
cin >> arr[i];
}
int average = 0;
for (int i = 0; i < n; i++)
average = average + arr[i];
average = average / n;
int count = 0;
for (int i = 0; i < n; i++)
{
if (arr[i] > average)
count++;
}
cout << count;
return 0;
}
4. 数组元素的移动
【问题描述】
数组元素的移动,把数组的第x个位置的元素先保存起来,然后把x+1到n的元素,依次往前移一位,最后原来的第x个位置的元素放在最后。
【输入形式】
有3行
第一行有一个整数n
第二行有n个整数
第三行有一个整数x
【输出形式】
移动后的数组
【样例输入】
8 1 2 3 4 5 6 7 8 1
【样例输出】
2 3 4 5 6 7 8 1
#include<iostream>
using namespace std;
int main()
{
const int max= 1000;
int n;
cin >> n;
int arr[max];
for (int i = 0; i < n; i++)
cin >> arr[i];
int x;
cin >> x;
int tmp = arr[x-1];
for (int i = x-1; i < n; i++)
{
if (i == n - 1)
arr[i] = tmp;
else
arr[i] = arr[i + 1];
}
for (int i = 0; i < n; i++)
{
cout << arr[i] << ' ';
}
return 0;
}
5. 删除指定位置的数字
【问题描述】删除指定位置的数组的值
【输入形式】第一行输入数组的个数
第二行输入数组元素
第三行输入 要删除的数
如:
5
1 2 3 4 5
Input the position to delete:5
Before delete: 1 2 3 4 5
After delete: 1 2 3 4
#include<iostream>
using namespace std;
int main()
{
const int max = 1000;
int n;
cin >> n;
int arr[max];
for (int i = 0; i < n; i++)
cin >> arr[i];
cout << "Input the position to delete:";
int x;
cin >> x;
cout << endl;
cout << "Before delete:";
for (int i = 0; i < n; i++)
cout << ' ' << arr[i];
cout << endl;
for (int i = 0; i < n; i++)
if (arr[i] == x)
for (int j = i; j < n; j++)
arr[j] = arr[j + 1];
cout << "After delete:";
for (int i = 0; i < n - 1; i++)
cout << ' ' << arr[i];
return 0;
}
6. 在指定位置插入一个数
【问题描述】在一个数组的指定位置插入一个数
【输入形式】第一行 n 数组元素的个数 (1--1000)第二行 数组元素 第三行:要插入元素的位置和要插入的数 (位置的值1---n)
【输出形式】如样例,每个数中间用一个空格隔开
【样例输入和输出】
5
1 2 3 4 5
Input the position and inserted number:3 30
【样例输出】
Before insert: 1 2 3 4 5
After insert: 1 2 30 3 4 5
#include<iostream>
using namespace std;
int main()
{
const int max = 1000;
int n;
cin >> n;
int arr[max];
for (int i = 0; i < n; i++)
cin >> arr[i];
cout << "before insert:";
for (int i = 0; i < n; i++)
cout << ' ' << arr[i];
cout << endl;
cout << "Input the position and inserted number:";
int p, num;
cin >> p >> num;
for (int i = 0; i < n; i++)
{
if (i == p - 1)
{
for (int j = n; j >i; j--)
arr[j] = arr[j-1];
arr[i] = num;
}
}
cout << endl;
cout << "After insert:";
for (int i = 0; i < n + 1; i++)
cout << ' ' << arr[i];
return 0;
}