新年新气象,新年新开始
2019.2.13,距离考研发布成绩还有两天,希望会有好的结果哈。今天开始练习pat乙级试题,每天一更博客,督促自己练习,这个是试题的链接PAT(Basic Level) Practice (中文) ,希望大家多多指正,互相学习!NEVER GIVE UP!
1001 #害死人不偿命的(3n+1)猜想#
1001这道题就比较简单啦,这个猜想就是所有的数经过运算后都会变成1,所以问题是需要几步才会变成1。我用的是递归算法,代码如下:
#include < iostream>
using namespace std;
void Callatz ( int n, int i)
{
if ( n== 1 )
cout<< i;
else if ( n% 2 == 0 ) {
i++ ;
Callatz ( n/ 2 , i) ;
}
else {
i++ ;
Callatz ( ( 3 * n+ 1 ) / 2 , i) ;
}
}
int main ( )
{
int n, i= 0 ;
cin>> n;
Callatz ( n, i) ;
return 0 ;
}
1002 #写出这个数#
这道题也是比较简单的,只是我的算法写的比较绕,哈哈。
(1)把输入的数看成是一个个字符,然后一个个存入数组中,每存入一个字符,就减去48变成数字与sum做加法,当getchar得到的字符为空时,得到sum的值。
(2)判断sum的值是否是一位,如果是一位则代码和不是一位的代码有点小区别。把sum的值从百位到个位用switch语句判断是多少,然后相应的输出对应的英文。代码如下:
#include < stdio. h>
#include< string. h>
#include < stdlib. h>
void shuchu ( int sum, int temp)
{
if ( sum % 10 != sum)
{
shuchu ( ( sum - ( sum % 10 ) ) / 10 , temp) ;
if ( sum != temp) {
switch ( sum % 10 ) {
case 0 : printf ( "ling " ) ; break ;
case 1 : printf ( "yi " ) ; break ;
case 2 : printf ( "er " ) ; break ;
case 3 : printf ( "san " ) ; break ;
case 4 : printf ( "si " ) ; break ;
case 5 : printf ( "wu " ) ; break ;
case 6 : printf ( "liu " ) ; break ;
case 7 : printf ( "qi " ) ; break ;
case 8 : printf ( "ba " ) ; break ;
case 9 : printf ( "jiu " ) ; break ;
}
}
else {
switch ( sum % 10 ) {
case 0 : printf ( "ling" ) ; break ;
case 1 : printf ( "yi" ) ; break ;
case 2 : printf ( "er" ) ; break ;
case 3 : printf ( "san" ) ; break ;
case 4 : printf ( "si" ) ; break ;
case 5 : printf ( "wu" ) ; break ;
case 6 : printf ( "liu" ) ; break ;
case 7 : printf ( "qi" ) ; break ;
case 8 : printf ( "ba" ) ; break ;
case 9 : printf ( "jiu" ) ; break ;
}
}
}
if ( sum % 10 == sum)
{
switch ( sum) {
case 0 : printf ( "ling " ) ; break ;
case 1 : printf ( "yi " ) ; break ;
case 2 : printf ( "er " ) ; break ;
case 3 : printf ( "san " ) ; break ;
case 4 : printf ( "si " ) ; break ;
case 5 : printf ( "wu " ) ; break ;
case 6 : printf ( "liu " ) ; break ;
case 7 : printf ( "qi " ) ; break ;
case 8 : printf ( "ba " ) ; break ;
case 9 : printf ( "jiu " ) ; break ;
}
}
}
void shuchu2 ( int sum, int temp)
{
switch ( sum % 10 ) {
case 0 : printf ( "ling" ) ; break ;
case 1 : printf ( "yi" ) ; break ;
case 2 : printf ( "er" ) ; break ;
case 3 : printf ( "san" ) ; break ;
case 4 : printf ( "si" ) ; break ;
case 5 : printf ( "wu" ) ; break ;
case 6 : printf ( "liu" ) ; break ;
case 7 : printf ( "qi" ) ; break ;
case 8 : printf ( "ba" ) ; break ;
case 9 : printf ( "jiu" ) ; break ;
}
}
int main ( int argc, char * argv[ ] )
{
char data[ 100 ] = { 0 } ;
int sum = 0 , temp = 0 ;
for ( int i= 0 ; i < 100 && ( data[ i] = getchar ( ) ) != '\n' ; i++ )
{
sum = sum + data[ i] - 48 ;
}
temp = sum;
if ( sum > 9 ) {
shuchu ( sum, temp) ;
}
else
{
shuchu2 ( sum, temp) ;
}
system ( "pause" ) ;
return 0 ;
}
1003#我要通过!#
这道题首先要读明白题,我就是开始没读明白题只能对5个测试点,剩下两个测试点。“如果 aPbTc 是正确的,那么 aPbATca 也是正确的,其中 a、 b、 c 均或者是空字符串,或者是仅由字母 A 组成的字符串。”,就是这句话要反复读明白。aPbATca ,这里a、 b、 c是指字符串,a和a要一样…例如,(AA)P(A)T(AAA)是正确的,那么(AA)P(A)AT(AAA)(AA)是正确的,那么[AA]P[AA]AT[AAAAA][AA]也是正确的,那么等等…这点比较有趣,也是需要注意的!
#include< stdio. h>
#include< string. h>
int reta ( char * str)
{
int k= 0 , a= 0 ;
for ( k= 0 ; str[ k] != '\0' ; k++ )
{
if ( str[ k] != 'P' && str[ k] != 'A' && str[ k] != 'T' )
return - 1 ;
}
a= strspn ( str, "A" ) ;
if ( str[ a] == 'P' )
return a;
else
return - 1 ;
}
int retb ( char * str, int a)
{
int b= 0 ;
char * p;
p= str+ a+ 1 ;
b= strspn ( p, "A" ) ;
if ( p[ b] == 'T' )
return b;
else
return - 1 ;
}
int retc ( char * str, int a, int b)
{
int c= 0 ;
char * p;
p= str+ a+ b+ 2 ;
c= strspn ( p, "A" ) ;
if ( p[ c] == '\0' )
return c;
else
return - 1 ;
}
int main ( int argc, char * argv[ ] )
{
int n= 0 , i= 0 , j= 0 , a= 0 , b= 0 , c= 0 , r[ 10 ] = { 0 } ;
char str[ 10 ] [ 100 ] ;
scanf ( "%d" , & n) ;
for ( i= 0 ; i< n && i< 10 ; i++ )
scanf ( "%s" , str[ i] ) ;
for ( i= 0 ; i< n && i< 10 ; i++ )
{
a= reta ( str[ i] ) ;
if ( a!= - 1 )
b= retb ( str[ i] , a) ;
else
continue ;
if ( b!= - 1 )
c= retc ( str[ i] , a, b) ;
else
continue ;
if ( b> 0 && c== b* a)
r[ i] = 1 ;
}
for ( i= 0 ; i< n && i< 10 ; i++ )
{
if ( r[ i] == 0 )
printf ( "NO\n" ) ;
else
printf ( "YES\n" ) ;
}
return 0 ;
}