- 习题文章题解均在博客英雄哪里出来可以找到,博主在这里记录自己的刷题过程及解题报告,想刷题可以找英雄哥,人特比特别好,如果你有毅力并且坚持下去跟着他你会有想不到的提升。加油兄弟们。写这个题解也是想通过csdn这个平台监督自己,进而获得提升,希望自己坚持下去,加油啊!!!
- c语言100例:《C语言入门100例》_英雄哪里出来-CSDN博客
- 算法100例:《算法零基础100讲》_英雄哪里出来-CSDN博客
今天做一下总结,感觉现在我做啥题都很吃力,自己一个题想很久都么思路,有了思路还是实现不了,但是看了别人的代码自己懂了之后能实现出来,我是接收知识比较慢的那种人,不能抱怨,只能低下头继续写代码,这时候沉住气,千万别和人家的厉害的比,自己做好自己的,别比进度,加油啊,相信自己。
先说一下这个题的解题思路:
题目条件是给你年/月/日,让你算一下这一天是这一年的第几天,我们肯定会想到把这个月的前几个月(也就是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):将本月的前一月累加的天数再加上本月的第几天最后就是答案了。
#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;
}
#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循环将其放在第一个。