本篇记录了两个代码,【图片整理】是一个数组排序题,【寻找数组的中心下标】看起来很适合用双指针,但是细节多,最后还是没通过全部用例,看了题解写出来的。 C语言部分是两个知道错了之后恍然大悟的选择题。
每日代码
图片整理
图片整理_牛客题霸_牛客网
将一个数组排序(数字大小写字母)
#include <stdio.h>
#include <string.h>
int main() {
//输入
char arr[1025] = {0};
scanf("%s",arr);
int length = strlen(arr);
//利用冒泡对数组排序
for(int i = 0; i < length - 1; i++)
{
for(int j = i + 1; j < length; j++)
{
if(arr[j] < arr[i])
{
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
//输出
printf("%s\n",arr);
return 0;
}
寻找数组的中心下标
. - 力扣(LeetCode)
int pivotIndex(int* nums, int numsSize) {
//记录整个数组和
int total_sum = 0;
for(int i = 0; i < numsSize; i++)
{
total_sum += nums[i];
}
//sum用于记录除当前元素外左半部分的和
int sum = 0;
for(int i = 0; i < numsSize; ++i)
{
//符合题目条件直接返回
if(2*sum + nums[i] == total_sum) return i;
//不符合继续把当前值记录到sum
sum += nums[i];
}
return -1;
}
!!!以下是我的只能过部分测试用例的错误代码
pivotIndex(int* nums, int numsSize) {
//定义双指针
int left = 0, right = numsSize - 1;
int sum_left = 0, sum_right = 0;
while(left < right - 1)
{
if(sum_left < sum_right)
{
sum_left += nums[left];
++left;
}
else
{
sum_right += nums[right];
--right;
}
}
//此时,左右指针相邻,比较最后一个数
if(sum_left < sum_right)
{
sum_left += nums[left];
if(sum_left == sum_right) return right;
}
else
{
sum_right += nums[right];
if(sum_left == sum_right) return left;
}
return -1;
}
一看见这题我就想到双指针,但是漏洞有很多,只能通过小一办的测试用例,如果是负数怎么办?如果最右边的值就是需要返回的值怎么办(因为先对sum_right加入元素)?...但我觉得这肯定也是一种方法,一定是我的思路还是有问题。
C语言碎片知识
以下对C语言函数的有关描述中,正确的有【多选】( )
A: 在C语言中,一个函数一般由两个部分组成,它们是函数首部和函数体
B: 函数的实参和形参可以是相同的名字
C: 在main()中定义的变量都可以在其它被调函数中直接使用
D: 在C程序中,函数调用不能出现在表达式语句中
答案:AB (我还选了个C,作孽啊)
在上下文及头文件均正常的情况下,下列代码的输出是( )(注: print 已经声明过)
int main() { char str[] = "Geneius"; print(str); return 0; } print(char *s) { if(*s) { print(++s); printf("%c", *s); } }
A: suiene B: neius C: run-time error D: suieneG
答案:A
用了递归调用,能看出来是倒序输出,但是用的是前置++,第一个字母活不到printf。
-The End-