A. 三数论大小(指针)
题目描述
输入三个整数,然后按照从大到小的顺序输出数值。
要求:用三个指针分别指向这三个整数,排序过程必须通过这三个指针来操作,不能直接访问这三个整数
输出时,必须使用这三个指针,不能使用存储三个整数的变量
输入
第一行输入t表示有t个测试实例
第二行起,每行输入三个整数
输入t行
输出
每行按照从大到小的顺序输出每个实例
输入样例1
3
2 4 6
88 99 77
111 333 222
输出样例1
6 4 2
99 88 77
333 222 111
#include <iostream>
using namespace std;
void exchange(int& a, int& b)//不能直接访问这三个整数
{
int temp;
temp = a;
a = b;
b = temp;
}
void compare(int& a, int& b, int& c)
{
if (a < b)
{
exchange(a, b);
}
if (a < c)
{
exchange(a, c);
}
if (b < c)
{
exchange(b, c);
}
}
int main()
{
int t;
cin >> t;
while (t--)
{
int a, b, c;
cin >> a >> b >> c;
compare(a, b, c);
cout << a << " " << b << " " << c << endl;
}
return 0;
}
B. 货币兑换(指针与常量)
题目描述
设定以下汇率常量
美元汇率为6.2619,表示1美元兑换6.2619元人民币
欧元汇率为6.6744,表示1欧元兑换6.6744元人民币
日元汇率为0.0516,表示1元日元兑换0.0516元人民币
港币汇率为0.8065,表示1元港币币兑换0.8065元人民币
定义一个常量指针,根据需求指针指向不同的汇率,然后计算出各种货币兑换为人民币的数量
要求:不能直接使用汇率常量进行计算,必须使用常量指针,只能使用一个指针
输入
输入一个t表示有t个测试实例
每行先输入一个字母,表示货币类型,然后再输入一个数字(正浮点数),表示货币数量
D表示美元,E表示欧元,Y表示日圆,H表示港币
依次输入t行
输出
每行输出兑换后的人民币数量,保留4位小数
在C++中,输出指定精度的参考代码如下:
#include <iostream>
#include <iomanip> //必须包含这个头文件
using namespace std;
int main( )
{ double a =3.141596;
cout<<fixed<<setprecision(3)<<a<<endl; //输出小数点后3位
}
输入样例1
4
Y 10000
D 88.3
H 200
E 73.1
输出样例1
516.0000
552.9258
161.3000
487.8986
#include <iostream>
#include <iomanip> //必须包含这个头文件
using namespace std;
int main()
{
int t;
cin >> t;
char type;
float m;
float f;
const float* p;//常量指针
float D = 6.2619, E = 6.6744, Y = 0.0516, H = 0.8065;
while (t--)
{
cin >> type;
cin >> m;
if (type == 'D')
{
p = &D;
}
else if (type == 'E')
{
p = &E;
}
else if (type == 'Y')
{
p = &Y;
}
else
{
p = &H;
}
f = *p * m;
cout << fixed << setprecision(4) << f << endl;
}
return 0;
}
C.动态数组(指针与数组)
题目描述
一开始未知数组长度,根据要求创建不同类型的指针,并且使用指针创建相应长度的数组,然后再完成不同的要求
若要求创建整数数组,计算数组内所有数据的平均值
若要求创建字符数组,找出数组内的最大字母
若要求创建浮点数数组,找出数组的最小值
要求程序整个过程不能使用数组下标,从数组创建、输入到搜索、比较、计算,到输出都必须使用指针
提示:使用new关键字
输入
第一行输入t表示有t个测试实例
第二行先输入一个大写字母表示数组类型,I表示整数类型,C表示字符类型,F表示浮点数类型;然后输入n表示数组长度。
第三行输入n个数据
依次输入t个实例
输出
每个根据不同的数组类型输出相应的结果
输入样例1
3
C 5
A D E B C
I 6
22 55 77 33 88 55
F 4
3.1 1.9 6.5 4.8
输出样例1
E
55
1.9
#include <iostream>
using namespace std;
int main()
{
int t;
cin >> t;
while (t--)
{
char type;
cin >> type;
int n;
cin >> n;
if (type == 'I')
{
int* av = new int[n];
int sum = 0;
for (int i = 0; i < n; i++)
{
cin >> *(av + i);
sum += *(av + i);
}
int a = 0;
a = sum / n;
cout << a << endl;
}
else if (type == 'C')
{
char* wo = new char[n];
char max;
for (int i = 0; i < n; i++)
{
cin >> *(wo + i);
if (i == 0)
max = *(wo + i);
else
{
if (*(wo + i) > max)
{
max = *(wo + i);
}
}
}
cout << max << endl;
}
else
{
float* nu = new float[n];
float min;
for (int i = 0; i < n; i++)
{
cin >> *(nu + i);
if (i == 0)
min = *(nu + i);
else
{
if (*(nu + i) < min)
{
min = *(nu + i);
}
}
}
cout << min << endl;
}
}
return 0;
}
D. 三串合一(指针与字符数组)
题目描述
输入三个字符串,通过指针读取各个字符串的子串(子串是指字符串中连续的一小部分),把它们合并成一个新字符串
要求:
1. 三个字符串的创建和输入可以使用数组,也可以不用
2. 输入后,根据三个字符串的子串的长度,计算出新字符串的长度
3. 使用动态数组的方法创建新的字符串,并且使用指针读取三个字符串的不同部分,并且复制到新字符串中,要求整个过程都不能使用数组下标
4. 使用指针输出新的字符串
输入
第一行输入t表示有t个测试实例
连续三行输入三个字符串,每个字符串都包含10个字符
连续三行,每行输入数字a和b,表示每个子串的开始和结束位置。注意字符串的位置是按照一般意义从1开始计算,和编程中的数组位置不同。例如字符串abcdefg,开始位置是3,结束位置是5,那么子串就是cde
依次输入t个实例
输出
每行输出合并后的新字符串
输入样例1
2
abcdefghij
ABCDEFGHIJ
aabbccddee
3 5
2 6
8 10
AABBCCDDEE
ffgghhiijj
FFGGHHIIJJ
1 4
5 8
2 7
输出样例1
cdeBCDEFdee
AABBhhiiFGGHHI
#include <iostream>
using namespace std;
int main()
{
int t;
cin >> t;
while (t--)
{
char g1[10];
char g2[10];
char g3[10];
for (int i = 0; i < 10; i++)
{
cin >> g1[i];
}
for (int i = 0; i < 10; i++)
{
cin >> g2[i];
}
for (int i = 0; i < 10; i++)
{
cin >> g3[i];
}
int a1, b1, a2, b2, a3, b3;
cin >> a1 >> b1 >> a2 >> b2 >> a3 >> b3;
char* f1 = g1;
char* f2 = g2;
char* f3 = g3;
for (int i = a1 - 1; i < b1; i++)
{
cout << *(f1 + i);
}
for (int i = a2 - 1; i < b2; i++)
{
cout << *(f2 + i);
}
for (int i = a3 - 1; i < b3; i++)
{
cout << *(f3 + i);
}
cout << endl;
}
return 0;
}
E. 矩阵左转(指针与数组)
题目描述
输入一个2*3的矩阵,将这个矩阵向左旋转90度后输出
比如现在有2*3矩阵 :
1 2 3
4 5 6
向左旋转90度后的矩阵变为:
3 6
2 5
1 4
要求:除了矩阵创建和数据输入可以使用数组和数组下标的方法,其他过程对矩阵的任何访问都必须使用指针
提示:m行n列的二维矩阵,第i行第j列的元素与首元素的距离为i*n+j,序号从0开始计算
输入
第一行输入t表示有t个测试实例
连续两行输入一个2*3的矩阵的数据
依次输入t个实例
输出
依次输出左转后的矩阵结果
在输出的每行中,每个数据之间都用空格隔开,最后一个数据后面也带有空格
输入样例1
2
1 2 3
4 5 6
4 5 6
7 8 9
输出样例1
3 6
2 5
1 4
6 9
5 8
4 7
//这个懒得写了,这样太麻烦了,复制了我当时写的
#include <iostream>
using namespace std;
void left(int* m, int* n)
{
for (int i = 0; i < 2; i++)
{
for (int j = 0; j < 3; j++)
{
*(n + (2 - j) * 2 + i) = *(m+ i * 3 + j);
}
}
}
int main()
{
int t;
cin >> t;
while (t--)
{
int m[2][3], n[3][2];
for (int i = 0; i < 2; i++)
for (int j = 0; j < 3; j++)
cin >> m[i][j];
left(*m, *n);
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 2; j++)
cout << *(*(n + i) + j) << ' ';
cout << endl;
}
}
return 0;
}
(PS:可能会有雷同,如果需要请私信我删除,抱歉
(PS2.0:如果存在bug与错误,请指出