PAT乙级笔记
C语言
- 1001
害死人不偿命的(3n+1)猜想
# include <stdio.h>
main()
{
int n;
int num =0;
scanf("%d",&n);
if (n <=1000)
{
while (n!=1)
{
if(n%2)
n =(3*n+1)/2;
else
n=n/2;
num+=1;
}
}
printf("%d",num);
return 0;
}
- 1002
写出这个数
1.因为数字比较长,用整型或长整型无法满足,因此使用字符串
2.用拼音写出时,通过数组借助数组的索引,而不需要使用switch一类较繁琐
#include <stdio.h>
#include<string.h>
void printsum();
int main()
{
char n[100];
char *p=n;
scanf("%s",n);
int sum =0;
//求各位数之和sum
while(*p!='\0')
{
sum+=(*p-'0');
p++;
}
printsum(sum);
}
//输出sum的各位拼音
void printsum(int m)
{
char *pinyin[]={"ling","yi","er","san","si","wu","liu","qi","ba","jiu"};
int split[10];
int i=0;
while(m/10)
{
split[i]=m%10;
m/=10;
i++;
}
split[i]=m;
for (i;i>0;i--)
printf("%s ",pinyin[split[i]]);
printf("%s\n",pinyin[split[i]]);
}
1003
我要通过!
这题的题意真的 容易让人误解。
说一下我对这一题的理解:
首先有且仅能有PAT三个字母,其次PAT的首尾可以加上任意数量的A,且要求数量相等
基于第二个条件如果aPbTc是正确的,那么b一定为A,a=c,因此aPbATac即可理解为中间必为PAAT,末尾的A的数量为开头的两倍。
综上正确的情况仅有两种:
1.中间为PAT时,首尾的A数量相同
2.中间为PAAT时,末尾的A数量为开头的两倍列表内容
成绩排序
使用结构体
#include <stdio.h>
#include<string.h>
struct stu
{
char name[10];
char stnum[10];
int grade;
}stus;
int main()
{
int num;
scanf("%d",&num);
int max=0,min=100;
int ind_max=-1,ind_min=-1;
int i;
struct stu st[100];
for(i=0;i<num;i++)
{
scanf("%s %s %d",&st[i].name,&st[i].stnum,&st[i].grade);
}
for (i=0;i<num;i++)
{
if (st[i].grade>=max)
{
max=st[i].grade;
ind_max=i;
}
if(st[i].grade<=min)
{
min=st[i].grade;
ind_min=i;
}
}
printf("%s %s\n",st[ind_max].name,st[ind_max].stnum);
printf("%s %s\n",st[ind_min].name,st[ind_min].stnum);
return 0;
}
报错:
a.c: In function ‘main’:
a.c:19:11: warning: format ‘%s’ expects argument of type ‘char ’, but argument 2 has type ‘char ()[10]’ [-Wformat=]
scanf(“%s %s %d”,&st[i].name,&st[i].stnum,&st[i].grade);
a.c:12:2: warning: ignoring return value of ‘scanf’, declared with attribute warn_unused_result [-Wunused-result]
scanf(“%d”,&num);
^~~~~~~~~~~~
a.c:19:3: warning: ignoring return value of ‘scanf’, declared with attribute warn_unused_result [-Wunused-result]
scanf(“%s %s %d”,&st[i].name,&st[i].stnum,&st[i].grade);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~