为了保研准备机考,写一下算法题,之前还没什么好感,写了一下,通过的时候还是很有成就感的。不过今天好困,就做这些,今天早下班了。前几天在开组会出题之类的,都在熬夜。
易错点总结
太久没写c了,但是配合LLM还是会写很多的,自己从头写的话各种小问题,大佬轻喷。
-
单引号表示字符,双引号表示字符串,不要搞混
-
有类型的函数要return
-
scanf接受的参数要加&比如scanf("%d\n", &len);
-
要用int main,return 0。
力扣hot100
有效的括号
这里的思路主要就是把左边的括号都改为右边的存储到栈里,然后有的时候直接比对就行了:
bool isValid(char* s) {int s_len = strlen(s);char temp[s_len];int p = 0;for(int i = 0; s[i] != '\0'; i++){if(s[i] == '(' || s[i] == '[' || s[i] =='{'){if(s[i] == '('){temp[p++] = ')';}else if(s[i] == '['){temp[p++] = ']';}else if(s[i] == '{'){temp[p++] = '}';}}else if(p == 0){return false;}else{if(temp[p-1] == s[i]){temp[--p] = '\0';}else{return false;}}}if(strlen(temp) == 0) return true;else return false;
}
两数之和
这里的思路很简单就是暴力求解:
/*** Note: The returned array must be malloced, assume caller calls free().*/
int* twoSum(int* nums, int numsSize, int target, int* returnSize) {int temp_sum = 0;*returnSize = 0;int *return_index = (int*) malloc(2*sizeof(int));for (int i = 0; i < numsSize; i++){{for(int j = i+1; j < numsSize; j++){temp_sum = nums[i] + nums[j];if(temp_sum == target){ return_index[0] = i;return_index[1] = j;*returnSize = 2;return return_index;}}}}return return_index;
}
洛谷题单 2023 官方题单(1~4 月)
[yLOI2023] 分解只因数
就是看是不是奇数就行。但是要写int main……我以为void也行。
#include <stdio.h>int main(){long long len = 0;scanf("%d", &len);long long get[len];long long temp = 0;for(int i = 0; i < len; i++){scanf("%lld", &get[i]);}for(int i = 0; i < len; i++){temp = get[i] % 2;if(temp != 0){printf("Yes\n");}else{printf("No\n");}}return 0;
}