2019-06-24今天尝试写了PAT乙级的前两道题好在在LeetCode里面见过(然而还是有些点忘记了,哈哈哈哈哈)所以做的比较快,这个东西相比于力扣更考研基本功,所以加油哇PAT和LeetCode

啊容我吐槽一下PAT,乙级比较宽容,看到时间限制在400ms时候,觉得很感动……然后比较烦的就是它的测试用例不可见,以至于我过不去不知道问题在哪,于是打开VS测试了很多遍觉得没问题,废了一点那时间……还有就是报错看起来有点累……还有头文件需要背……代码也需要背……

1001 害死人不偿命的(3n+1)猜想

N限制在了1000内,比较爽。基本上题干就是思路……

#include <iostream>
using namespace std;
int main()
{
	int a; int i = 0;
	cin >> a;
	while (a != 1)
	{
		if (a % 2 == 0)
		{
			a = a / 2;
			i++;
		}
		else
		{
			a = 3 * a + 1;
			a = a / 2;
			i++;
		}
	}
		cout << i;
	return 0;
}

犯了一个低级错误,第一次忘了while循环,所以直接if后直接结束!!这么蠢的错误,以后一定要避免!!

1002 写出这个数 (20 分)

也很简单……我记得力扣做过,记住了很大一部分。

#include<iostream>
#include <stack>
using namespace std;
int main()
{   stack<int>ans;
    string ss;cin>>ss;
    int count=0;
    int sum=0;int res;
    for(int j=0;j<ss.size();j++)
    {
        sum+=ss[j]-'0';
    }
    while(sum>=10)
    {
        res=sum%10;
        ans.push(res);
        sum=sum/10;
        count++;
    }
    ans.push(sum);
    count++;
    for(int i=count;i>0;i--)
    {
        res=ans.top();
        ans.pop();
        if(res==0)
            cout<<"ling";
        else if(res==1)
            cout<<"yi";
        else if(res==2)
            cout<<"er";
        else if(res==3)
            cout<<"san";
        else if(res==4)
            cout<<"si";
        else if(res==5)
            cout<<"wu";
        else if(res==6)
            cout<<"liu";
        else if(res==7)
            cout<<"qi";
        else if(res==8)
            cout<<"ba";
        else if(res==9)
            cout<<"jiu";
        if(i!=1)
            cout<<" ";
    }
    return 0;
}

思路上没有障碍,主要说说自己改良的点和错误的点。

首先前几次通不过去,主要是数超范围了,12345678909876543210123456789这个数好像long long都超了,这个问题力扣我是接触过的,之前的CSDN中也写到了,直接用string读入!!然后string-'0'直接获得各个位数……

这个我之前在文章里也强调过,有点印象,但是我觉得没必要,可是同志们,这样直接获得数字省了大把时间!!这第二次栽跟头了,记住了!

还有一点就是“哎哎哎就是那啥那啥啊啊啊啊我忘了怎么用”的一个方法,用在一一对应的转化上,就是数组下标和内容的对应关系,比如str[ling yi er san]对应下标是0 1 2 3 比用10句if看起来美观多了…

以上这两点是我遇见过然后忘记的内容,这次牢牢记下!

还有就是一些头文件,还有模板,慢慢自己总结,到时候往上套用就行了!

然后开始刷力扣,一上来就是一个困难题(合并k个列表)……反正我没打算能写出来,就想了一会儿看了解析(暴力法,两个两个合并……),根据暴力法自己改编了一下,然后在传参和定义函数那里出现了问题,借助评论改了一波,还有bug……明儿再改!!

贴个错误代码,希望明天改好!

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
     ListNode *merge( ListNode *l1,ListNode *l2)
     {
         ListNode* head=new ListNode(0);
         ListNode* ss=head;
         while(l1!=NULL&&l2!=NULL)
      {
          if(l1->val>=l2->val)
          {
           ss->next=l2;
           ss=ss->next;
           l2=l2->next;
          }
          else 
          {
              ss->next=l1;
              l1=l1->next;
              ss=ss->next;
          }
      }
        if(l1!=NULL)
           ss->next=l1;
        else ss->next=l2;
        return head;
    }
    
    ListNode* mergeKLists(vector<ListNode*>& lists)
    {  int l=lists.size();  
       int i;
       for(i=0;i<l;i++)
       {
           if(i>0)
           lists[i+1]=merge( lists[i],lists[i+1]);
       }
     return lists[0];
    }
};
发布了42 篇原创文章 · 获赞 16 · 访问量 2896

猜你喜欢

转载自blog.csdn.net/weixin_44412218/article/details/93481360