题目1
题目
将一组数据从大到小排列后输出,要求显示每个元素及它们在原数组中的下标。
作答
这题使用冒泡降序就可以了,for循环输出。
冒泡顾名思义就是先把一个数据排出来放到数组尾部,接着从头再来放在倒数第二位……代码见下:
#include<iostream>
using namespace std;
int main()
{
int a[10] = { 3,2,5,7,2,8,5,2,6,7 };
for (int i = 0; i < 9; i++)
{
for (int j = 0; j < 9-i; j++)
{
if (a[j] < a[j + 1])
{
int temp = a[j];
a[j] = a[j + 1];
a[j + 1] = temp;
}
}
}
for (int i = 0; i < 10; i++)
cout << "a[" << i << "] = " << a[i] << endl;
}
题目2
题目
输入一个表示星期几的数,然后输出相应的英文单词。要求:使用指针数组实现。
作答
先使用一个字符数组将周一到周日的英文进行存储,然后我们定义一个指针数组令它指向开始时的字符数组,根据用户输入的数字,我们进行输出。这里有一个小知识点需要注意一下,字符数组名在输出时不输出地址,而是直接把这个字符串进行输出。好的,代码在下面供参考:
#include<iostream>
using namespace std;
int main()
{
char day[][10] = { "Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday" };
char* pday[7];
for (int i = 0; i < 7; i++)
pday[i] = day[i];
int week;
cout << "请用数字输入今天是星期几" << endl;
cin >> week;
while (week < 1 || week>7)
{
cout << "你输入错了,请重新输入" << endl;
cin >> week;
}
cout << "Today is " << pday[week - 1] << "!!!" << endl;
}
题目3
题目
把两个升序排列的整型数组合并为一个升序数组。设计好算法,以得到较高的运行效率。
作答
我们首先需要先定义两个升序排列的整型数组、还需要一个足够大的数组用来存放合并后的整数,我们用i来记录a[]的下标,j来记录b[]的下标,依次比较a和b中的数据,将小的放在新数组里面同时该下标+1,当a或者b遍历结束,为了节约时间,我们可以直接将另一个数组剩余数据直接复制到新数组中去。
最后需要优化一下程序,也就是我们需要用变量来记录数组的大小,这样方便数组的数据更改。
下面代码供参考:
#include<iostream>
using namespace std;
int main()
{
int a[] = { -3,1,3,5,7,9,10,11,12};
int b[] = { 2,4,6,8,10,12};
int sum = sizeof(a) / sizeof(int)+ sizeof(b) / sizeof(int);
int my_new[100];
int i, j;
for (i = 0, j = 0; i != (sizeof(a)/sizeof(int)) && j != (sizeof(b) / sizeof(int)); )
{
if (a[i] < b[j])
my_new[i + j] = a[i++];
else
my_new[i + j] = b[j++];
}
while (sum != i + j)
{
if (i == sizeof(a) / sizeof(int))
{
my_new[i + j] = b[j++];
continue;
}
if (j == sizeof(b) / sizeof(int))
my_new[i + j] = a[i++];
}
for (int temp = 0; temp < sum; temp++)
cout << my_new[temp] << ' ';
}