PAT刷题感悟

PAT (Basic Level) Practice (中文)

1001

我特么就多写了个while(1)就通不过了。
这个能少还是得少啊。

#include <stdio.h>

int main(){
  int count,a;
  scanf("%d", &a);
  count = 0;
  while (1){
    count++;
    if (a%2!=0){
      a = (a*3+1)/2;
    }else{
      a /= 2;
    }
    if (a ==1){
      break;
    }
  }
  printf("%d", count);
  return 0;
}

这样在最后一步,时间上是过不去的,因此必须去掉while (1)的条件
这样写可以正确通过:

#include <stdio.h>

int main(){
  int count,a;
  scanf("%d", &a);
  count = 0;
  while (a!=1){
    count++;
    if (a%2!=0){
      a = (a*3+1)/2;
    }else{
      a /= 2;
    }
  }
  printf("%d", count);
  return 0;
}

1002

这道题对于我来说最大的坑无非就在于C语言操作数组特别是字符串数组非常的不熟悉。这里总结下几个遇到坑爹的地方:

  1. 怎么使数字(int)转换成字符串(char *),这里使用sprintf()来解决这个问题。
  2. 便是定义那个字符串数组了,那个数组的话需要定义称为二维的数组,为char a[][5]这种形式的,这里的话,对数组操作不熟悉是一个最大的短板。
#include <stdio.h>
#include <string.h>

int main(){
    int sum, len;
    char a[100];
    scanf("%s", &a);
    // get the sum
    len = strlen(a);
    sum = 0;
    for (int i=0; i<len;++i){
        sum += a[i] - '0';
    }
    char zhongwen[][5] = {"ling", "yi", "er", "san", "si", "wu", "liu", "qi", "ba", "jiu"};
    // transform sum to string
    char temp[5];
    sprintf(temp, "%d", sum);
    // printf("the sum is %s", temp);
    len = strlen(temp);
    int index = 0;
    for (int j=0; j<len; ++j){
        index = temp[j] - '0';
        if (j == len-1){
            printf("%s", zhongwen[index]);
        }else{printf("%s ", zhongwen[index]);}
    }
}

值得注意的是,这道题的要求是400ms以内,而这个程序在2ms内就已经完成了,所以这道题和上面那道要求2ms完成的不是一个侧重点。这个需要多加思索。

1004

#include <stdio.h>
#include <string.h>

typedef struct student{
  char name[10];
  char student_num[10];
  int grade;
}student;

int main(){
  // input the n student
  int n;
  scanf("%d", &n);
  student instance[n];  // array
  // input the detail
  char name[10];
  char student_num[10];
  int grade;
  for (int i=0; i<n; ++i){
    scanf("%s %s %d", &name, &student_num, &grade);
    strcpy(instance[i].name, name);
    strcpy(instance[i].student_num, student_num);
    instance[i].grade = grade;
  }
  // find the highest and lowest
  student best = instance[0];
  student worst = best;
  for (int j=1; j<n; ++j){
    if (instance[j].grade > best.grade){
      best = instance[j];
    }else if(instance[j].grade < worst.grade){
      worst = instance[j];
    }
  }
  printf("%s %s\n%s %s", best.name, best.student_num, worst.name, worst.student_num);
  return 0;
}

这道题开始出现的问题在于我在对字符串赋值的时候使用了=,然后出现了报错,因此,需要使用string.h中的strcpy()函数。

PAT (Advanced Level)

1001

#include <stdio.h>
#include <string.h>

int main(){
  long x,y;
  scanf("%d %d", &x, &y);
  // already get the two input num;
  long sum = x+y;
  char temp[7];
  sprintf(temp, "%d", sum);
  int len = strlen(temp);
  for (int i=0; i<len; ++i){
      printf("%c", temp[i]);
      if (temp[i] == '-') continue;
      if ((i+1)%3==len%3 && i != len-1) printf(",");  // 这段代码写的很有意思,可以多考虑一下
  }
  return 0;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 14,364评论 0 33
  • 直到有一天撞见阳光~
    TalBen阅读 3,751评论 0 0
  • 1.最出彩的地方就是淘宝电影的引导页是电影答题,设计真的不错,炒鸡好看,炒鸡有心意,好看的设计更具有传播性,而且这...
    Petra阅读 1,810评论 0 1
  • 我喜欢海,却经不起它的冷漠无情,我爱慕海,却总是被它的遗忘。我想拥抱海,却总是空欢意难尝。如果海是一个人该多好,弃...
    孤风掠影阅读 1,535评论 1 4
  • 大家好我叫孟仁杰,今天我给大家说的题目是《虎皮兰》。 在我家的阳台上...
    孟仁杰简书阅读 2,271评论 0 0

友情链接更多精彩内容