关于指针(找出总分最高的学生)
有些小细节不太会处理,在下面标注一下。
scanf("%s %s %d %d %d", s[i].num, s[i].name, &s[i].a, &s[i].b, &s[i].c);
p = &s[i];
printf("%s %s %d\n", p->name, p->num, max);
#include <math.h>
#include <stdio.h>
typedef struct stuent {
char num[6];
char name[12];
int a, b, c;
} stu;
int main(void) {
stu s[12];
stu* p = NULL;
int n;
scanf("%d", &n);
int sum = 0, max = 0;
for (int i = 0; i < n; i++) {
sum = 0;
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
scanf("%s %s %d %d %d", s[i].num, s[i].name, &s[i].a, &s[i].b, &s[i].c);
sum = s[i].a + s[i].b + s[i].c;
if (sum > max) {
max = sum;
p = &s[i];//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
}
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
printf("%s %s %d\n", p->name, p->num, max);
return 0;
}
汉诺(hanoi)塔问题(递归)
没看懂
#include<stdio.h>
void print(char start,char end)
{
printf("%c-->%c\n",start,end);
return;
}
void hanoi(int n,char start,char temp,char end)
{
if(n==1)
{
print(start,end);
}else
{
hanoi(n-1,start,end,temp);
print(start,end);
hanoi(n-1,temp,start,end);
}
return ;
}
int main(void)
{
int n;
scanf("%d",&n);
hanoi(n,'a','b','c');
return 0;
}
九连环问题(递归)
不要去想明白每个步骤,理解抽象即可,比如要上第n个环,则要先上前n-1个环,再拿下来前n-2个环,把第n个环放上去,接下来该上第n-2个环。
#include <stdio.h>
void RingUp(int number);
void RingDn(int number);
int main()
{
int n;
char p;
scanf("%d %c", &n, &p);
switch (p)
{
case 'U':
RingUp(n);
break;
case 'D':
RingDn(n);
break;
}
return 0;
}
void RingUp(int number)
{
if(number>2)
{
RingUp(number-1);
RingDn(number-2);
printf("%d: U\n",n);
RingUp(number-2);
}else if(number==2)
{
printf("%d: U\n",n-1);
printf("%d: U\n",n);
}else if(number==1)
{
printf("%d: U\n",n);
}
return ;
}
void RingDn(int number)
{
if(number>2)
{
RingDn(number-2);
printf("%d: D\n",n);
RingUp(number-2);
RingDn(n-1);
}else if(number==2)
{
printf("%d: D\n",n);
printf("%d: D\n",n-1);
}else if(number==1)
{
printf("%d: D\n",n);
}
return;
}
哈希表提高时间效率
(问的ChatGPT)
修改哈希函数
修改哈希表大小
void rehash(void) {
int newSize = HASH * 2; // 扩大 2 倍
hashnode **newTable = (hashnode **)calloc(newSize, sizeof(hashnode *));
for (int i = 0; i < HASH; i++) {
hashnode *node = hashtable[i];
while (node) {
hashnode *next = node->next;
int newIndex = fhash(node->key) % newSize;
node->next = newTable[newIndex];
newTable[newIndex] = node;
node = next;
}
}
free(hashtable);
hashtable = newTable;
HASH = newSize;
}
搭积木最少步骤
#include <stdio.h>
int main(void)
{
int n;
scanf("%d", &n);
int a[100005] = {0};
int cnt = 0;
for (int i = 0; i < n; i++)
{
scanf("%d", &a[i]);
if (i != 0 && a[i] > a[i - 1])
cnt += (a[i] - a[i - 1]);
if (i == 0)
cnt += a[i];
}
printf("%d\n", cnt);
return 0;
}
快速幂
看这个视频讲的很清楚