目录
前言:
一.刷题(1)
1.1打印X图案
1.2打印带空格直角三角形图案
1.3小乐乐改数字
1.4牛牛的线段
2.刷题(2)
2.1判断奇偶性
2.2及格分数
2.3kiki算术
2.4(a+b-c)*d
2.5KiKi算期末成绩
前言:
博文结构:开头是本文涉及的题目;
牛客网链接;题目截图;【不太懂的会加百度词条】;
解题思路;代码通过截图;代码实现;该题收获总结;
以上就是本刷题专栏的结构---旨在尽快提升编程能力设置的例行格式!
今日份题目有:小乐乐改数字、KiKi算期末成绩、(a+b-c)*d、牛牛的线段、kiki算数、及格分数、判断整数奇偶性、打印X图案、打印带空格直角三角形图案。
较有难度的是:打印X图案、打印带空格直角三角形图案、小乐乐改数字、牛牛的线段。博主先讲这些。
一.刷题(1)
1.1打印X图案
牛客网链接:OJ链接
解题思路:我们输入的数字是行数,很明显这个X图案是由*和空格组合打印出来的,空格如果算上,这是一个n行n列的二维数组。正反对角线打印*,其余打印空格。
#include <stdio.h>
int main()
{
int n = 0;
//多组输入
while(~scanf("%d", &n))
{
int i = 0;
//打印n行
for(i = 0; i < n; i++)
{
int j = 0;
//打印第i行里的n列
for(j = 0; j < n; j++)
{
//i和j相等是正对角线
//i+j等于n-1是反对角线
if(i == j || i + j == n - 1)
{
printf("*");
}
else
{
printf(" ");
}
}
//打印完一列换行
printf("\n");
}
}
return 0;
}
收获总结:正对角线是行和列相等的情况,反对角线是行和列之和等于行数减1; 多组输入的另一中表示方法~scanf("%d", &n);
补充:当scanf读取失败时会返回EOF,EOF的值是-1,如果对-1按位取反(~),由于-1的补码为全1,全部取反就会变成全0,结果就为0(假)。
1.2打印带空格直角三角形图案
牛客网链接:OJ链接
解题思路:这道题要求我们输入确定打印的行数,观察一下,这个图形由空格和*组成的,先打印空格,再打印*,并且如果看成是5行5列的二维数组。打印单元空格需要两个,打印单元*要加空格。
#include <stdio.h>
int main()
{
int n = 0;
//多组输入
while(scanf("%d", &n) != EOF)
{
int i = 0;
//打印n行
for(i = 0; i < n; i++)
{
int j = 0;
//打印第i行里的n列
//1.先打印空格单元
for(j = 0; j < n - 1 - i; j++)
{
//两个空格
printf(" ");
}
//2.打印*加空格
for(j = 0; j <= i; j++)
{
printf("* ");
}
//打印完一列换行
printf("\n");
}
}
return 0;
}
收获总结:在打印这种一列(横向看)由两种单元组成的时候,控制循环是关键。观察分析在打印第一行的时候,有4个单元,第二行有3个单元空格,一直到0。在打印第一列的时候需要循环4次,用n的话是打印5次,用n-1的话一直是打印4次,再减去随行数增加的行数i,推断一下,i为0的时候,j<n-1-i,单元空格打印4次,i为1时,j<n-1-i,单元空格打印3次,符合就这么做。在控制*空格的时候,打印一次,两次,直到n次,j<=i可以在i等于0的时候打印1次,i为1的时候打印两次,符合。也可以这样j<i+1。
1.3小乐乐改数字
牛客网链接:OJ链接
解题思路:这道题的意思是说,输入一个整数,把这个整数里的每一位换成0或1,对应的规则是,如果该位是奇数,改成1,偶数改成0。我们给出一个存放32个整型的数组,然后把这个整数的每一位取出来放在数组里,最后再把每一位根据它是第几位,乘上相应的权重后,全部加起来就是我们要求的更换后的数字,最后打印出来。
#include <stdio.h>
#include <math.h>
int main()
{
int n = 0;
scanf("%d", &n);
int arr[32] = {0};
int i = 0;
//从低取出n的每一位放到数组里
while(n)
{
//偶数放0
if(n % 2 == 0)
{
arr[i++] = 0;
}
//奇数放1
else
{
arr[i++] = 1;
}
//丢弃掉最低的一位
n /= 10;
}
//由于我们都是放完后,数组的下一位等待放
//最后一次n已经被改成0,所以让i--变成数组的末下标
for(i--;i>=0;i--)
{
//最后变成的数字是10进制
n += arr[i] * pow(10, i);
}
printf("%d\n", n);
return 0;
}
收获总结:循环取模,除法,对数组的每一位进行分离拆解;提高在循环中对下标的控制能力;拓宽思维。
1.4牛牛的线段
牛客网链接:OJ链接
解题思路:不要看错题目的输入,睁大眼睛看!
#include <stdio.h>
#include <math.h>
int main()
{
int x1, y1;
int x2, y2;
//题目说分两组输入
scanf("%d %d", &x1, &y1);
scanf("%d %d", &x2, &y2);
//由于我们没有绝对值,所以要保证是大的数减小的数
int n = x1>x2?x1-x2:x2-x1;
int m = y1>y2?y1-y2:y2-y1;\
//使用一个新的变量接收它们的和,不能直接放在printf里链式访问
int end = pow(n, 2)+pow(m, 2);
printf("%d\n", end);
return 0;
}
收获总结:第一就是要看清题目,博主第一次在尝试解的时候,对应的输入弄混了,拷到VS里调试一番才知道哪里出问题了;printf("%d\n", pow(n, 2)+pow(m, 2));这个代码它跑不过去,初步判断是因为这是两个函数,它不是像我们想的那样,求出它们的和之后再以整型的方式打印出来,它这样写是错误的;最后就是锻炼代码能力。
OK,较难一点的讲完后,把简单的顺便一提吧~都是刷题的见证。
2.刷题(2)
2.1判断奇偶性
牛客网链接:OJ链接
解题思路:能被2整除表示成 x % 2 == 0
#include <stdio.h>
int main() {
int n = 0;
while(~scanf("%d", &n))
{
if(n % 2 == 0)
{
printf("Even\n");
}
else
{
printf("Odd\n");
}
}
return 0;
}
收获总结:熟练判断奇数偶数的代码敲法;锻炼代码能力;
2.2及格分数
牛客网链接:OJ链接
#include <stdio.h>
int main() {
int n = 0;
while(scanf("%d", &n) != EOF)
{
if(n >= 60)
{
printf("Pass\n");
}
else
{
printf("Fail\n");
}
}
return 0;
}
收获总结:锻炼代码能力;
2.3kiki算术
牛客网链接:OJ链接
#include <stdio.h>
#include <math.h>
int main()
{
long long a, b, sum;
scanf("%lld %lld", &a, &b);
sum = a + b;
int i = 0;
int n = 2;
int k = 0;
while(n--)
{
k += sum % 10 * pow(10, i);
i++;
sum /= 10;
}
printf("%d\n", k);
return 0;
}
收获总结:对于一个有可能溢出的情况,我们需要使用long long类型;锻炼代码能力;
2.4(a+b-c)*d
牛客网链接:OJ链接
#include <stdio.h>
int main() {
int a, b, c, d;
scanf("%d %d %d %d", &a, &b, &c, &d);
printf("%d\n", (a+b-c)*d);
return 0;
}
收获总结:锻炼代码能力;
2.5KiKi算期末成绩
牛客网链接:OJ链接
#include <stdio.h>
int main() {
float a, b, c, d;
scanf("%f %f %f %f", &a, &b, &c, &d);
float sum = (a * 0.2)+(b * 0.1)+(c * 0.2)+(d * 0.5);
printf("%.1f\n", sum);
return 0;
}
收获总结:如果前面输入的地方显示的是一些整数,后面输出的结果又要求是浮点数,那么最开始的输入我们用浮点数来接收,而不是整数;锻炼代码能力;
OK今日份刷题总结到这里,休息一会吧,再接着刷。
训言:
保证理解的前提下,保证质量的前提下,多刷题,最后总结!!!!