啊容我吐槽一下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];
}
};