今天开始学习C语言算法,留存纪念一下,并记录下写代码过程中遇见得问题
PAT B1001 (3n+1)猜想
#include <stdio.h>
void FUNC(int *data);//声明
int main()
{
int i;
printf("Please input your num: \n");
scanf("%d",&i);
FUNC(&i);
return 0;
}
/* 调用函数*/
void FUNC(int *data)
{
int step=0;
int n= *data;
while(n!=1)
{
if(n % 2 == 0)
{
n/=2;
}else
{
n = (3*n +1)/2;
}
step++;
}
printf("%d\n",step);
}
输入样例3
输出样例5
Pass
PAT B1032
这题遇见一个问题,本地使用
int school[max] = {0} ;//编译会报错
error: variable-sized object may not be initialized
原因是使用变量定义数组容量时,不能同时进行初始化!!!
解决方法有动态内存分配,但是题目要求了固定长度,所以我使用memset 去赋值
#include <stdio.h>
#include <string.h>//memset 依赖
int main()
{
int Max = 10010;
int Num,SchoolId,Score;
int SchoolScore[Max];
memset(SchoolScore,0,sizeof(SchoolScore));
printf("please input school num:\n");
scanf("%d",Num);
/* 计算总分*/
for(int i= 0; i< Num;i++)
{
printf("Please input schoolId: Score : \n");
scanf("%d %d",&SchoolId,&Score);
SchoolScore[SchoolId] += Score;
}
/* 遍历找最高分学校*/
int k =1,temp = -1;
for(int i =0; i< = Num; i++)
{
if(SchoolScore[i] > temp)
{
temp=SchoolScore[i];
k=i;
}
}
printf("%d %d\n",k,temp);
return 0;
}
输入样例
6
3 65
2 80
1 100
2 70
3 40
3 0
输出样例
2 150