题目 1023: [编程入门] 选择排序
题目描述
用选择法对10个整数从小到大排序。
输入格式
输入10个无序的数字
输出格式
排序好的10个整数
样例输入
4 85 3 234 45 345 345 122 30 12
样例输出
3 4 12 30 45 85 122 234 345 345
MYCPP;//正确答案//选择排序和冒泡排序相差无几!
int main()
{//可以写的更可视化一点 但是下午醒的太晚了┭┮﹏┭┮
int arr[10];
for (int i = 0; i < 10; i++)
{
cin >> arr[i];
}
int j, k, temp;
for (j = 0; j < 9; j++)//j是小于n-1的
{
for (k = j + 1; k < 10; k++)//这里要注意 k是从j+1开始的 而k是小于n的!
{
if (arr[j] >arr[k])
{
temp = arr[j];//一个简单的swap函数
arr[j] = arr[k];
arr[k] = temp;
}
}
}
for (int a = 0; a < 10; a++)
{
cout << arr[a] << endl;
}
return EXIT_SUCCESS;
}
void BubbleSort(int arr[], int len)//冒排;
{
int i, j, temp;
len = sizeof(&arr) / sizeof(&arr[0]);
for (i = 0; i < 10 - 1; i++)
{
for (j = 0; j < 10 - i - 1; j++)
{
if (arr[j] > arr[j + 1])
{
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
void print(int arr[], int len)
{
int i = 0;
for (i = 0; i < len; i++)
{
cout << arr[i] << endl;
}
}
int main()
{
int arr[10]={ 4 ,85 ,3, 234 ,45 ,345, 345 ,122 ,30 ,12 };
int l = 0;
int i, j, temp;
for (l = 0; l < 10; l++)
{
cin >> arr[l];
}
BubbleSort(arr, 10);
print(arr, 10);
return 0;
}
题目 1024: [编程入门]矩阵对角线求和
题目描述
求一个3×3矩阵对角线元素之和。
输入格式
矩阵
输出格式
主对角线 副对角线 元素和
样例输入
1 2 3
1 1 1
3 2 1
样例输出
3 7
MYCPP;//正确答案//代码复用性差 但是赶时间赶ac没办法啦!(ง •_•)ง
int main()
{
int arr[3][3] = { 0 },i,j;
for (i=0;i<3;i++)
{
for (j=0;j<3;j++)
{
cin >> arr[i][j];
}
}
int sum1 = arr[0][0] + arr[1][1] + arr[2][2];
int sum2 = arr[0][2] + arr[1][1] + arr[2][0];
cout << sum1 << " " << sum2;
return EXIT_SUCCESS;
}
题目 1025: [编程入门]数组插入处理
题目描述
已有一个已正序排好的9个元素的数组,今输入一个数要求按原来排序的规律将它插入数组中。
输入格式
第一行,原始数列。 第二行,需要插入的数字。
输出格式
排序后的数列
样例输入
1 7 8 17 23 24 59 62 101
50
样例输出
1 7 8 17 23 24 50 59 62 101
MYCPP;//正确答案
//思路1.运用一个循环先输入有序数列然后把第0号空间留给待排数n
//思路2.输入待排数后进行冒泡或者选择排序(目前就学这俩 快排学了 还没理解(ง •_•)ง)
int main()
{
int arr[11] = { 0 };
int x = 0;
for (x = 1; x < 10; x++)
{
cin >> arr[x];
}
int n;
cin >> n;
arr[0] = n;
int i, j,t;
for (i=0;i<9;i++)
{
for (j = 0; j < 9-i; j++)
{
if (arr[j]>arr[j+1])
{
t = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = t;
}
}
}
int l = 0;
for (l = 0; l < 10; l++)
{
cout << arr[l] << endl;
}
return EXIT_SUCCESS;
}
题目 1026: [编程入门]数字逆序输出
题目描述
输入10个数字,然后逆序输出。
输入格式
十个整数
输出格式
逆序输出,空格分开
样例输入
1 2 3 4 5 6 7 8 9 0
样例输出
0 9 8 7 6 5 4 3 2 1
MYCPP;//正确答案
//想的太复杂了 既然题目要求逆序输出数组 那么直接倒叙打印这个数组不就完了吗
//unsigned int 都可以用这种方法 倒叙输出就直接倒叙打印
//最开始我还打算用排序算法写一下 然后输出 (没仔细读题!)
int main()
{
int arr[10] = { 0 };
for (int x = 0; x < 10; x++)
{
cin >> arr[x];
}
for (int l = 9; l >= 0; l--)
{
cout << arr[l] << " " ;
}
return EXIT_SUCCESS;
}
题目 1027: [编程入门]自定义函数处理最大公约数与最小公倍数
题目描述
写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果两个整数由键盘输入。
输入格式
两个数
输出格式
最大公约数 最小公倍数
样例输入
6 15
样例输出
3 30
MYCPP;
//辗转相除法:用较小数除较大数,再用出现的余数(第一余数)去除除数,再用出现的余数(第二余数)去除第一余数,如此反复,直到最后余数是0为止。
//.利用辗转相除法求出最大公约数,而得出两个数的最大公约数,把两数相乘再除以最大公约数就能求出最小公倍数。
void isB(int a, int b)
{//思路错误 应该利用辗转相除法来求解
if (a * c == b * c)
{
cout<< c;
}
}
int main()
{
int a, b;
cin >> a >> b;
isB(a,b);
return EXIT_SUCCESS;
}
//正确答案//利用辗转相除法!
int fun1(int m,int n)
{
int s;
while(n!=0)
{
s=m%n;
m=n;
n=s;
}
return m;
}
int fun2(int m,int n)
{
int a;
a=fun1(m,n);
return m*n/a;
}
int main()
{
int m,n;
cin>>m>>n;
cout<<fun1(m,n)<<fun2(m,n);
return 0;
}