*最近考试较忙,所以先写ac数量前五的题,预计后面五题会在1.6发出。
一、型号阵列-21
描述
有一根由#字符组成的竖直方向的直线把a行b列的星号阵列一分为二,其中左半边有c列,右半边有b-c列。
输出该阵列。
输入
只有一组案例。
三个正整数a、b、c。(1<=a<=10,1<=b<=10,1<=c,1<=b-c
输出
输出星号阵列。每行最后一个非空格字符后不要输出空格,最后一行输出完要换行。
样例输入
3 5 2
样例输出
**#***
**#***
**#***
关键代码
*****
for (int i = 1; i <= a; i++)
{
for (int j = 1; j <= b + 1; j++)
{
if (j == c + 1)
{
cout << "#";
}
else
{
cout << "*";
}
}
cout << endl;
}
*****
解释
很简单的打卡题,星号阵列的一贯做法,外循环表示行,内循环表示列,用#将这个矩形分开所以每行的c+1列就输入#,否则输入*。
二、乘法口诀
描述
已知一个一位正整数m,输出乘法口诀表中与之相关的乘法。
输入
只有一组案例。
一个一位正整数m。
输出
输出9行,第1行是1与m相乘的算式,第2行是2与m相乘的算式,...,第9行是9与m相乘的算式。其中第一个乘数要比较小,第二个乘数要比较大,如果不是,要调整一下。
每个算式输出完都要换行。算式中不要有空格。
样例输入
3
样例输出
1*3=3
2*3=6
3*3=9
3*4=12
3*5=15
3*6=18
3*7=21
3*8=24
3*9=27
关键代码
*****
for (int i = 1; i <= 9; i++)
{
int x = m, y = i;
if (y > x)
{
swap(y, x);
}
printf("%d*%d=%d\n", y, x, y * x);
}
*****
解释
用x和y记录i和m的值(为了不对循环产生影响和m的值改变),由题目可得,输出时小的数字在前,大的数字在后,所以如果y比x大,就交换两个值,这样永远y的值比x的值小,最后用printf格式输出。
三、简易积分
描述
计算积分的结果
输入
多组案例。一个正整数n,表示案例的数量。(n<=100)
每组案例由4个整数a、b、c、d组成。(绝对值均不大于100,c<=d)
输出
针对每组案例,输出一个浮点数,表示该积分的结果。
每组案例输出完要换行。
样例输入
1
1 2 3 4
样例输出
5.5
关键代码
*****
int sd = a * c + b, xd = a * d + b;
int h = d - c;
double ans = 0.5 * (sd + xd) * h;
*****
解释
这条直线的积分实际上就是一个梯形的面积 算出上底、下底和高,利用梯形面积求解即可,注意0.5要写前面,确保他是浮点数。
四、数组计算
描述
计算一堆整数的最大值、最小值、总和、平均值,其中平均值精确到小数点后1位(指四舍五入)。
输入
多组案例。一个正整数n,表示案例的数量。(n<=20)
每组案例中,先是一个正整数m,表示数字的个数,(m<=100)
然后是m个整数。(绝对值均不大于10000)
输出
针对每组案例,输出4个数字,分别表示这m个整数的最大值、最小值、总和、平均值,其中平均值精确到小数点后1位。
每两个数字之间有一个空格。每组案例输出完要换行。
样例输入
1
6
1 2 3 4 5 10
样例输出
10 1 25 4.2
关键代码
*****
for (int i = 1; i <= m; i++)
{
int x;
cin >> x;
sum += x;
maxnum = max(maxnum, x);
minnum = min(minnum, x);
}
double average = 1.0 * sum / m;
int x = average;
if (x == average)
{
printf("%d %d %d %d\n", maxnum, minnum, sum, x);
}
else
{
printf("%d %d %d %.1lf\n", maxnum, minnum, sum, average);
}
*****
解释
这题虽然题目是数组,但是可以边读入边判断,注意对average进行四舍五入保留以为小数,如果average刚好是整数,那么他后面的.0是不用输出的,鉴于格式输出的方便性以及四舍五入的方便性,运用pringtf格式输出%.1lf就是对double型变量四舍五入保留一位小数。
五、查找-4
描述
在一个字符串数组a中,查找是否存在长度与目标字符串x长度相同的元素。把a中所有长度与x相同的元素连接在一起输出。
输入
多组案例。一个正整数n,表示案例的数量。(n<=100)
每组案例先是一个字符串x和一个正整数m,分别表示目标字符串,以及字符串数组a元素的个数。(x字符串的长度不大于100,m<=100)
然后是m个字符串,表示字符串数组中各个元素的值。(所有字符串的长度均不大于100)
输出
针对每组案例,a数组中不存在任何一个元素的长度和x相同,则输出No,
否则输出一个字符串,是a数组中所有长度与x相同的元素,按照下标从小到大连接在一起。
每组案例输出完要换行。
样例输入
2
abc 3
abcd xyz ABC
abcde 3
abcd xyz ABC
样例输出
xyzABC
No
关键代码
*****
for (int i = 0; i < m; i++)
{
cin >> s[i];
}
int xlen = x.length();
string ans = "";
bool flag = 0;
for (int i = 0; i < m; i++)
{
if (s[i].length() == xlen)
{
flag = 1;
ans = ans + s[i];
}
}
*****
解释
首先是读入m个字符串,存到数组中,然后遍历这些数组,寻找有无长度和目标字符串长度一样的,有就用ans变量加上去,flag用来判断有无长度与目标字符串长度一样的字符串