题目一
设计一个从5个整数中取最小值和最大值的程序
-
输入
输入只有一组测试数组,为5个不大于一万的正整数
-
输出
输出两个数,第一个为五个数中最小值,第二个为五个数中最大值,两个数字一空格隔开
思路
运用顺序表的知识,创建顺序表。将元素存储在顺序表中,然后类似于顺序表的删除操作,最后将最大最小值返回出来。
算法实现
#include <stdio.h>
#define MaxSize 5//定义顺序表的最大长度
typedef int ElemType ;
typedef struct {
ElemType data[MaxSize];//顺序表的元素
int length;//顺序表的当前长度
}Sqlist;
void InitList(Sqlist &L)//初始化顺序表里面的数据,千万别忘记加入一个数据,长度要加一
{
for (int j = 0; j < MaxSize; j++)
{
scanf("%d", &L.data[j]);
L.length++;
}
}
bool MIN(Sqlist& L, ElemType &min, ElemType& max)
{
min = L.data[0];
max = L.data[L.length - 1];
int pos1 = 0;//假设0号元素最小
int pos2 = 4;//假设最后一个元素最大
for (int i = 0,j=L.length-1; i < L.length; i++,j--)
{
if (L.data[i] < min) {
min = L.data[i];//如果比min小就赋给min
pos1 = i;
}
if (L.data[j] > max) {
max = L.data[j];//如果比max大,就发给max
pos2 = j;
}
}
return true;
}
int main()
{
Sqlist L;
L.length = 0;
InitList(L);
int min;
int max;
if (MIN(L, min,max))
{
printf("%d %d", min,max);
}
return 0;
}
示例
题目二
- ASCLL码排序
输入三个字符(可以重复)后,按各字符的ASALL码从小到大的顺序输出这三个字符
- 输入
第一行输一个数N,表示有N组测试数据。后面的N行输入多组数据,每组输入数据都是占一行,有三个字符组成,之间无空格
- 输入
对于每组输入数据,输出一行,字符中间用一个空格分开。
思路
先接受三个变量,通过if—else语句和中间变量实现从小到大的排序,再在外面写一个写一个while循环从而达到输入多行数据
算法实现
#include <iostream>
#include<cstdio>
using namespace std;
int main()
{
int N; //N代表需要输入几行数据
char a, b, c, t; /a,b,c用来三个字符,t为中间变量
scanf("%d", &N);
while (N--)
{
cin >> a;
cin >> b;
cin >> c; //这里不能直接用scanf,会让缓冲区的字符被读入
if (a > b)
{
t = a; a = b; b = t;
}
if (a > c)
{
t = a; a = c; c = t;
}
if (b > c)
{
t = b; b = c; c = t;
}
printf("%c %c %c\n", a, b, c);
}
return 0;
}
示例
总结
题目一虽然用数组会更简单些,但最近在学数据结构中的线性表那块,就想着用顺序表实现一下,在使用顺序表的时候,其中表里面输入数据还是要注意到表长的改变的,不能出错,然后后面都是常规操作了。题二就是要注意scanf在此题循环中不能直接使用。