- 习题文章题解均在博客英雄哪里出来可以找到,博主在这里记录自己的刷题过程及解题报告,想刷题可以找英雄哥,人特比特别好,如果你有毅力并且坚持下去跟着他你会有想不到的提升。加油兄弟们。写这个题解也是想通过csdn这个平台监督自己,进而获得提升,希望自己坚持下去,加油啊!!!
- c语言100例:《C语言入门100例》_英雄哪里出来-CSDN博客
- 算法100例:《算法零基础100讲》_英雄哪里出来-CSDN博客
今天做一下总结,感觉现在我做啥题都很吃力,自己一个题想很久都么思路,有了思路还是实现不了,但是看了别人的代码自己懂了之后能实现出来,我是接收知识比较慢的那种人,不能抱怨,只能低下头继续写代码,这时候沉住气,千万别和人家的厉害的比,自己做好自己的,别比进度,加油啊,相信自己。
《算法零基础100讲》(第6讲) 日期算法_英雄哪里出来-CSDN博客
力扣:1154. 一年中的第几天 - 力扣(LeetCode) (leetcode-cn.com)
先说一下这个题的解题思路:
题目条件是给你年/月/日,让你算一下这一天是这一年的第几天,我们肯定会想到把这个月的前几个月(也就是1月到本月的前一个月(不包括本月))加上,在加上天数就是我们所要求解的,但是尤其不要忘记还要判断这一年是闰年还是平年,它们的2月份天数不一样,闰年是29天,平年是28天。这样的思路就差不多了,还有一点就是由于力扣本身给我们的接口,输入的年月份是字符串,所以我们就要把字符串里的年月日转化成数字。
//判断闰年or平年//(1) bool is_leap_year(int year){ if(year %4 ==0 && year % 100 !=0 || year % 400==0) { return true; } return false; } //提取字符串中的年月日//(2) int StroInt(char*str,int len){ int i = 0; int sum=0; for(i=0;i<len;i++){ sum=sum*10+(str[i]-'0'); } return sum; } int dayOfYear(char * date){ int mounthday[]={0,31,28,31,30,31,30,31,31,30,31,30,31};//(3) int i; int sumday[13]; int year,day,mounth; year=StroInt(date+0,4);//(4) mounth=StroInt(date+5,2);//(5) day=StroInt(date+8,2);(6) sumday[0]=0;//(7) mounthday[2]= is_leap_year(year) ? 29 : 28;//(8) for(i=1;i<mounth;i++){//(9) sumday[i]=sumday[i-1]+mounthday[i]; } return sumday[mounth-1]+day;//(10) }(1):判断闰年还是平年
所以就是能被4整除并且不能被100整除或者能被400整除的数字;
(2):利用ASCII码值进行将字符串转化成数字,当然也可以用atoi函数
(3):创建一个数组表示每个月有多少天,其中第一个设置为0天是为了防止在后面累加天数的时候溢出;
(4):提取年份(也就是从第一个到第四个)
(5):提取月份(也就是从第5个到第7个(这里也就是从第五个开始往后两个))
(6):提取年份(也就是从第8个到第10个 (这里也就是从第8个开始往后两个))
(7):这时累加天数将下标为0时初始化为0与上面创建数组相照应。
(8):2月份如果是闰年就为29天否则平年28天。
(9):从一月开始一直到本月的前一月进行累加天数
(10):将本月的前一月累加的天数再加上本月的第几天最后就是答案了。
【第52题】qsort 结构体 应用 | 对二维空间中的点进行排序_英雄哪里出来-CSDN博客
#include<stdio.h> #include<stdlib.h> //定义一个结构体 struct Point { int x, y;//x坐标 y坐标 }pt[10001]; int cmp(const struct Point* pa, const struct Point* pb) { if (pa->x == pb->x){ return pa->y - pb->y; } return pa->x - pb->x; } void input(int n) { int i = 0; for (i = 0; i < n; i++) { scanf("%d %d", &pt[i].x, &pt[i].y); } } void output(int n) { int i = 0; for (i = 0; i < n; i++) { printf("%d %d\n", pt[i].x, pt[i].y); } } int main() { int n; while (scanf("%d", &n) != EOF) { //输入函数 input(n); //qsort函数实现 qsort(&pt, n, sizeof(pt[0]), cmp); //输出函数 output(n); } return 0; }
上一题进阶排序结构体字符串
typedef struct student { char name[20]; }Stu; int cmp(const void* pa, const void* pb) { return strcmp(((Stu*)pa)->name, ((Stu*)pb)->name); } void print(Stu s[],int sz) { int i = 0; for (i = 0; i < sz; i++) { printf("%s ", s[i].name); } } int main() { Stu s[3] = { {"wangermazi"},{ "zhaolaowu"},{"gulaosan"} }; int sz = sizeof(s) / sizeof(s[0]); qsort(s, sz, sizeof(s[0]), cmp); print(s,sz); return 0; }
【第53题】二维数组的应用 | 求二维数组每一行的最大值_英雄哪里出来-CSDN博客_c语言求二维数组每行最大值
#define maxn 110 int a[maxn][maxn]; #include<stdio.h> void input(int m, int n, int a[][maxn]) { int i, j; for (i = 0; i < m; ++i) { for (j = 0; j < n; ++j) { scanf("%d", &a[i][j]); } } } void output(int m, int n, int a[][maxn]) { int i, j; for (i = 0; i < m; ++i) { for (j = 0; j < n; ++j) { printf("%d ", a[i][j]); } printf("\n"); } } renew_a(int m, int n, int a[maxn][maxn]) { int i, j,max; for (i = 0; i < m; ++i) { max = a[i][0]; for (j = 1; j < n; ++j) { if (a[i][j] > max) { max = a[i][j]; } } a[i][0] = max; } } int main() { int n = 0; int m = 0; while (scanf("%d %d", &m, &n) != EOF) { //输入函数 input(m, n,a); //排序 renew_a(m,n,a); //输出函数 output(m, n, a); } return 0; }
这个题主要是renew_a这个函数;
先把二维数组的每一行的第一个元素当做这一行中最大的元素,然后依次枚举这一行的所有元素找到最大的那个元素,跳出for循环将其放在第一个。