PAT1001
#include <iostream>
using namespace std;
int main ( )
{
int n;
cin>> n;
int i= 0 ;
while ( n!= 1 )
{
if ( n% 2 == 0 )
{
i++ ;
n= n/ 2 ; }
else if ( n% 2 != 0 )
{
i++ ;
n= ( 3 * n+ 1 ) / 2 ; }
}
cout<< i<< endl;
return 0 ;
}
PAT1002(单行字符串的输入与读取,cin,get,getline等使用)
#include <iostream>
#include <string>
using namespace std;
int main ( ) {
string chinesePinYin[ ] = { "ling" , "yi" , "er" , "san" , "si" , "wu" , "liu" , "qi" , "ba" , "jiu" } ;
string s;
cin>> s;
int length= s. length ( ) ;
int sum= 0 ;
for ( int i= 0 ; i< length; i++ ) {
sum+ = s[ i] - '0' ;
}
string num= to_string ( sum) ;
for ( int i= 0 ; i< ( int ) num. length ( ) ; i++ ) {
if ( i!= 0 ) {
cout<< " " ;
}
cout<< chinesePinYin[ num[ i] - '0' ] ;
}
return 0 ;
}
PAT1003(读取指定个数的字符串)
#include <iostream>
#include <string>
#include <map>
using namespace std;
int main ( )
{
int n;
cin>> n;
for ( int i= 0 ; i< n; i++ )
{
string s;
cin>> s;
int length= s. length ( ) ;
bool flag= true ;
map< char , int > m;
int index_p, index_t;
for ( int j= 0 ; j< length; j++ )
{
switch ( s[ j] )
{
case 'P' :
m[ 'P' ] ++ ;
index_p= j;
break ;
case 'A' :
m[ 'A' ] ++ ;
break ;
case 'T' :
m[ 'T' ] ++ ;
index_t= j;
break ;
default :
flag= false ;
break ;
}
}
if ( m[ 'P' ] == 0 || m[ 'A' ] == 0 || m[ 'T' ] == 0 )
flag= false ;
else {
if ( index_p* ( index_t- index_p- 1 ) != length- index_t- 1 )
flag= false ;
}
if ( flag)
cout<< "YES" << endl;
else {
cout<< "NO" << endl;
}
}
return 0 ;
}
PAT1004(结构体的使用与数据读取)
#include <iostream>
using namespace std;
int main ( )
{
int number;
cin>> number;
struct stu{
string name;
string id;
int grade;
} ;
stu stu1[ number] ;
for ( int i= 0 ; i< number; i++ ) {
cin>> stu1[ i] . name>> stu1[ i] . id>> stu1[ i] . grade;
}
int gradeMax= stu1[ 0 ] . grade;
int gradeMin= stu1[ 0 ] . grade;
int id_min= 0 , id_max= 0 ;
for ( int i= 1 ; i< number; i++ ) {
if ( stu1[ i] . grade< gradeMin) {
gradeMin= stu1[ i] . grade;
id_min= i;
}
if ( stu1[ i] . grade>= gradeMax) {
gradeMax= stu1[ i] . grade;
id_max= i;
}
}
cout<< stu1[ id_max] . name<< " " << stu1[ id_max] . id<< endl;
cout<< stu1[ id_min] . name<< " " << stu1[ id_min] . id<< endl;
return 0 ;
}
PAT1005
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int arr[ 10000 ] ;
bool cmp ( int a, int b) { return a > b; }
int main ( ) {
int k, n, flag = 0 ;
cin >> k;
vector< int > v ( k) ;
for ( int i = 0 ; i < k; i++ ) {
cin >> n;
v[ i] = n;
while ( n != 1 ) {
if ( n % 2 != 0 ) n = 3 * n + 1 ;
n = n / 2 ;
if ( arr[ n] == 1 ) break ;
arr[ n] = 1 ;
}
}
sort ( v. begin ( ) , v. end ( ) , cmp) ;
for ( int i = 0 ; i < ( int ) v. size ( ) ; i++ ) {
if ( arr[ v[ i] ] == 0 ) {
if ( flag == 1 ) cout << " " ;
cout << v[ i] ;
flag = 1 ;
}
}
return 0 ;
}
PAT1006
#include <iostream>
using namespace std;
int main ( )
{
int n;
cin>> n;
int a[ 3 ] ;
for ( int i= 0 ; i< 3 ; i++ ) {
a[ i] = n% 10 ;
n= n/ 10 ;
}
for ( int i= 0 ; i< a[ 2 ] ; i++ ) {
cout<< "B" ;
}
for ( int i= 0 ; i< a[ 1 ] ; i++ ) {
cout<< "S" ;
}
for ( int i= 0 ; i< a[ 0 ] ; i++ ) {
cout<< i+ 1 ;
}
return 0 ;
}
PAT1007(质数的判断)
#include <iostream>
#include <string>
#include <map>
#include <vector>
#include <algorithm>
using namespace std;
bool judge_PAT1007 ( int a) {
for ( int i= 2 ; i* i<= a; i++ ) {
if ( a% i== 0 ) {
return false ;
}
}
return true ;
}
void PAT ( ) {
int N, cnt= 0 ;
cin>> N;
for ( int i= 5 ; i<= N; i++ ) {
if ( judge_PAT1007 ( i- 2 ) && judge_PAT1007 ( i) )
cnt++ ;
}
cout<< cnt;
}
int main ( ) {
PAT ( ) ;
}
PAT1008(数组元素循环右移,使用vector)
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main ( )
{
int n, m;
cin>> n>> m;
vector< int > a ( n) ;
for ( int i= 0 ; i< n; i++ ) {
cin>> a[ i] ;
}
m= m% n;
reverse ( a. begin ( ) , a. end ( ) ) ;
reverse ( a. begin ( ) , a. begin ( ) + m) ;
reverse ( a. begin ( ) + m, a. end ( ) ) ;
for ( int i= 0 ; i< n- 1 ; i++ )
cout<< a[ i] << " " ;
cout<< a[ n- 1 ] ;
return 0 ;
}
PAT1009(句子中单词顺序倒置)
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
int i= 0 ;
int main ( )
{
vector< string> ss ( 80 ) ;
string s;
while ( cin>> s)
{
ss[ i] = s;
i++ ;
if ( cin. get ( ) == '\n' ) break ;
}
for ( int j= i- 1 ; j> 0 ; j-- )
cout<< ss[ j] << " " ;
cout<< ss[ 0 ] ;
return 0 ;
}
PAT1010
#include <iostream>
using namespace std;
int main ( ) {
int a, b, flag = 0 ;
while ( cin >> a >> b)
{
if ( b != 0 ) {
if ( flag == 1 ) cout << " " ;
cout << a * b << " " << b - 1 ;
flag = 1 ;
}
if ( cin. get ( ) == '\n' ) break ;
}
if ( flag == 0 ) cout << "0 0" ;
return 0 ;
}
PAT1011(int取值范围)
#include <iostream>
using namespace std;
int main ( ) {
int n;
cin>> n;
for ( int i = 0 ; i < n; i++ ) {
long long int a, b, c;
cin>> a>> b>> c;
printf ( "Case #%d: %s\n" , i + 1 , a + b > c ? "true" : "false" ) ;
}
return 0 ;
}
PAT1012
#include <iostream>
#include <vector>
#include <iomanip>
using namespace std;
int main ( )
{
int n;
int m;
cin>> m;
int A1= 0 , A2= 0 , A3= 0 , A5= 0 ;
float A4= 0 ;
int count2= 1 ;
int count4= 0 ;
while ( cin>> n)
{
if ( n% 10 == 0 )
A1+ = n;
else if ( n% 5 == 1 )
{
if ( count2% 2 == 0 )
A2- = n;
else
A2+ = n;
count2++ ;
}
else if ( n% 5 == 2 )
A3++ ;
else if ( n% 5 == 3 )
{
A4+ = n;
count4++ ;
}
else if ( n% 5 == 4 )
if ( A5< n)
A5= n;
if ( cin. get ( ) == '\n' )
break ;
}
if ( A1== 0 )
cout<< "N " ;
else
cout<< A1<< " " ;
if ( A2== 0 && count2== 1 )
cout<< "N " ;
else
cout<< A2<< " " ;
if ( A3== 0 )
cout<< "N " ;
else
cout<< A3<< " " ;
if ( A4== 0 )
cout<< "N " ;
else
{
A4= A4/ count4;
cout<< setiosflags ( ios:: fixed) << setprecision ( 1 ) << A4<< " " ;
}
if ( A5== 0 )
cout<< "N" ;
else
cout<< A5;
return 0 ;
}
PAT1013
#include <iostream>
#include <cmath>
#include <vector>
using namespace std;
bool judge ( int i)
{
if ( i== 1 ) return false ;
if ( i== 2 ) return true ;
for ( int j= 2 ; j< sqrt ( i) + 1 ; j++ )
if ( i% j== 0 )
return false ;
return true ;
}
int main ( )
{
int m, n;
cin>> m>> n;
vector< int > a;
int count= 0 ;
for ( long long int i= 1 ; i< 1000000000000000 ; i++ )
{
if ( judge ( i) )
{
count++ ;
if ( count>= m)
a. push_back ( i) ;
}
if ( count> n- 1 )
break ;
}
int size= a. size ( ) ;
int i= 0 ;
while ( i< size)
{
for ( int j= 0 ; j< 9 ; j++ )
{
if ( i< size)
cout<< a[ i] ;
if ( i< size- 1 )
cout<< " " ;
i++ ;
}
if ( i< size)
cout<< a[ i] << endl;
i++ ;
}
return 0 ;
}
PAT1014
#include <cctype>
#include <iostream>
using namespace std;
int main ( ) {
string a, b, c, d;
cin >> a >> b >> c >> d;
char t[ 2 ] ;
int pos, i = 0 , j = 0 ;
while ( i < a. length ( ) && i < b. length ( ) ) {
if ( a[ i] == b[ i] && ( a[ i] >= 'A' && a[ i] <= 'G' ) ) {
t[ 0 ] = a[ i] ;
break ;
}
i++ ;
}
i = i + 1 ;
while ( i < a. length ( ) && i < b. length ( ) ) {
if ( a[ i] == b[ i] && ( ( a[ i] >= 'A' && a[ i] <= 'N' ) || isdigit ( a[ i] ) ) ) {
t[ 1 ] = a[ i] ;
break ;
}
i++ ;
}
while ( j < c. length ( ) && j < d. length ( ) ) {
if ( c[ j] == d[ j] && isalpha ( c[ j] ) ) {
pos = j;
break ;
}
j++ ;
}
string week[ 7 ] = { "MON " , "TUE " , "WED " , "THU " , "FRI " , "SAT " , "SUN " } ;
int m = isdigit ( t[ 1 ] ) ? t[ 1 ] - '0' : t[ 1 ] - 'A' + 10 ;
cout << week[ t[ 0 ] - 'A' ] ;
printf ( "%02d:%02d" , m, pos) ;
return 0 ;
}
PAT1015(sort函数使用)
#include <stdio.h>
#include <algorithm>
#include <string.h>
using namespace std;
struct info{
char num[ 10 ] ;
int de_s, cai_s, sum;
int clas;
} stu[ 100010 ] ;
bool cmp ( info a, info b) {
if ( a. clas != b. clas) return a. clas < b. clas;
else if ( a. sum != b. sum) return a. sum > b. sum;
else if ( a. de_s != b. de_s) return a. de_s> b. de_s;
else return strcmp ( a. num, b. num) < 0 ;
}
int main ( )
{
int N, L, H;
scanf ( "%d%d%d" , & N, & L, & H) ;
int cnt = N;
for ( int i= 0 ; i< N; i++ )
{
scanf ( "%s %d %d" , & stu[ i] . num, & stu[ i] . de_s, & stu[ i] . cai_s) ;
stu[ i] . sum = stu[ i] . de_s+ stu[ i] . cai_s;
if ( stu[ i] . de_s < L|| stu[ i] . cai_s < L) { stu[ i] . clas = 5 ; cnt-- ; }
else if ( stu[ i] . de_s >= H && stu[ i] . cai_s >= H) stu[ i] . clas = 1 ;
else if ( stu[ i] . de_s >= H && stu[ i] . cai_s < H) stu[ i] . clas = 2 ;
else if ( stu[ i] . de_s < H && stu[ i] . cai_s < H && stu[ i] . de_s>= stu[ i] . cai_s) stu[ i] . clas = 3 ;
else stu[ i] . clas = 4 ;
}
sort ( stu, stu+ N, cmp) ;
printf ( "%d\n" , cnt) ;
for ( int i= 0 ; i< cnt; i++ )
{
printf ( "%s %d %d\n" , stu[ i] . num, stu[ i] . de_s, stu[ i] . cai_s) ;
}
return 0 ;
}
PAT1016
#include <iostream>
#include <string>
using namespace std;
int main ( ) {
int a, c;
int b, d;
cin>> a>> b>> c>> d;
string aStr= to_string ( a) ;
string cStr= to_string ( c) ;
int aLength= aStr. length ( ) ;
int num1= 0 ;
for ( int i= 0 ; i< aLength; i++ ) {
if ( ( char ) aStr[ i] - '0' == b) {
num1= num1* 10 + b;
}
}
int cLength= cStr. length ( ) ;
int num2= 0 ;
for ( int i= 0 ; i< cLength; i++ ) {
if ( ( char ) cStr[ i] - '0' == d) {
num2= num2* 10 + d;
}
}
cout<< ( int ) num1+ ( int ) num2;
return 0 ;
}
PAT1017(手动除法)
#include <iostream>
#include <string>
using namespace std;
int main ( ) {
string s;
int b;
cin>> s>> b;
int length= s. length ( ) ;
int t= 0 ;
int tmp= 0 ;
t= ( s[ 0 ] - '0' ) / b;
if ( ( t!= 0 && length> 1 ) || length== 1 ) {
cout<< t;
}
tmp= ( s[ 0 ] - '0' ) % b;
for ( int i= 1 ; i< length; i++ ) {
t= ( tmp* 10 + s[ i] - '0' ) / b;
cout<< t;
tmp= ( tmp* 10 + s[ i] - '0' ) % b;
}
cout<< " " << tmp;
return 0 ;
}
PAT1018
#include <iostream>
using namespace std;
int main ( ) {
int n;
cin >> n;
int jiawin = 0 , yiwin = 0 ;
int jia[ 3 ] = { 0 } , yi[ 3 ] = { 0 } ;
for ( int i = 0 ; i < n; i++ ) {
char s, t;
cin >> s >> t;
if ( s == 'B' && t == 'C' ) {
jiawin++ ;
jia[ 0 ] ++ ;
} else if ( s == 'B' && t == 'J' ) {
yiwin++ ;
yi[ 2 ] ++ ;
} else if ( s == 'C' && t == 'B' ) {
yiwin++ ;
yi[ 0 ] ++ ;
} else if ( s == 'C' && t == 'J' ) {
jiawin++ ;
jia[ 1 ] ++ ;
} else if ( s == 'J' && t == 'B' ) {
jiawin++ ;
jia[ 2 ] ++ ;
} else if ( s == 'J' && t == 'C' ) {
yiwin++ ;
yi[ 1 ] ++ ;
}
}
cout << jiawin << " " << n - jiawin - yiwin << " " << yiwin << endl << yiwin << " " << n - jiawin - yiwin << " " << jiawin << endl;
int maxjia = jia[ 0 ] >= jia[ 1 ] ? 0 : 1 ;
maxjia = jia[ maxjia] >= jia[ 2 ] ? maxjia : 2 ;
int maxyi = yi[ 0 ] >= yi[ 1 ] ? 0 : 1 ;
maxyi = yi[ maxyi] >= yi[ 2 ] ? maxyi : 2 ;
char str[ 4 ] = { "BCJ" } ;
cout << str[ maxjia] << " " << str[ maxyi] ;
return 0 ;
}
PAT1019(字符串排序,字符串转数字)
#include <iostream>
#include <algorithm>
using namespace std;
bool cmp ( char a, char b) { return a > b; }
int main ( ) {
string s;
cin >> s;
s. insert ( 0 , 4 - s. length ( ) , '0' ) ;
do {
string a = s, b = s;
sort ( a. begin ( ) , a. end ( ) , cmp) ;
sort ( b. begin ( ) , b. end ( ) ) ;
int result = stoi ( a) - stoi ( b) ;
s = to_string ( result) ;
s. insert ( 0 , 4 - s. length ( ) , '0' ) ;
cout << a << " - " << b << " = " << s << endl;
} while ( s != "6174" && s != "0000" ) ;
return 0 ;
}
PAT1020(浮点数保留小数)
#include <iostream>
#include <iomanip>
#include <algorithm>
using namespace std;
struct goods{
int id;
double store;
double totalPrice;
double unitPrice;
} ;
bool cmp ( goods kind1, goods kind2) {
return kind1. unitPrice> kind2. unitPrice;
}
int main ( ) {
int type, demand;
cin>> type>> demand;
goods goods[ type] ;
for ( int i= 0 ; i< type; i++ ) {
goods[ i] . id= i;
cin>> goods[ i] . store;
}
for ( int i= 0 ; i< type; i++ ) {
cin>> goods[ i] . totalPrice;
goods[ i] . unitPrice= goods[ i] . totalPrice/ goods[ i] . store;
}
sort ( goods, goods+ type, cmp) ;
double saleVolume= 0 ;
int i= 0 ;
while ( demand> 0 && i< type) {
if ( demand> goods[ i] . store) {
saleVolume+ = goods[ i] . totalPrice;
demand- = goods[ i] . store;
} else {
saleVolume+ = goods[ i] . unitPrice* demand;
demand= 0 ;
}
i++ ;
}
cout<< setiosflags ( ios:: fixed) << setprecision ( 2 ) << saleVolume<< endl;
return 0 ;
}
PAT1021
#include <iostream>
using namespace std;
int main ( ) {
string s;
cin >> s;
int a[ 10 ] = { 0 } ;
for ( int i = 0 ; i < s. length ( ) ; i++ )
a[ s[ i] - '0' ] ++ ;
for ( int i = 0 ; i < 10 ; i++ ) {
if ( a[ i] != 0 )
printf ( "%d:%d\n" , i, a[ i] ) ;
}
return 0 ;
}
PAT1022(进制转换)
#include <iostream>
using namespace std;
int main ( ) {
int a, b, d;
cin >> a >> b >> d;
int t = a + b;
if ( t == 0 ) {
cout << 0 ;
return 0 ;
}
int s[ 100 ] ;
int i = 0 ;
while ( t != 0 ) {
s[ i++ ] = t % d;
t = t / d;
}
for ( int j = i - 1 ; j >= 0 ; j-- )
cout << s[ j] ;
return 0 ;
}
PAT1023
#include <iostream>
using namespace std;
int main ( ) {
int a[ 10 ] = { 0 } , t= 0 ;
for ( int i = 0 ; i < 10 ; i++ )
cin >> a[ i] ;
for ( int i = 1 ; i < 10 ; i++ ) {
if ( a[ i] != 0 ) {
cout << i;
t = i;
break ;
}
}
for ( int i = 0 ; i < a[ 0 ] ; i++ ) cout << 0 ;
for ( int i = 0 ; i < a[ t] - 1 ; i++ ) cout << t;
for ( int i = t + 1 ; i < 10 ; i++ )
for ( int k = 0 ; k < a[ i] ; k++ )
cout << i;
return 0 ;
}
PAT1024(科学计数法–字符串分解)
#include <iostream>
#include <string>
using namespace std;
int main ( ) {
string s;
cin>> s;
int i= 0 ;
while ( s[ i] != 'E' )
i++ ;
string t= s. substr ( 1 , i- 1 ) ;
int n= stoi ( s. substr ( i+ 1 ) ) ;
if ( s[ 0 ] == '-' )
cout<< "-" ;
if ( n< 0 ) {
cout<< "0." ;
for ( int j= 0 ; j< abs ( n) - 1 ; j++ )
cout<< "0" ;
for ( int j= 0 ; j< ( int ) t. length ( ) ; j++ ) {
if ( t[ j] != '.' )
cout<< t[ j] ;
}
} else {
cout<< t[ 0 ] ;
int j= 2 , cnt= 0 ;
for ( ; j< ( int ) t. length ( ) && cnt< n; j++ , cnt++ ) {
cout<< t[ j] ;
}
if ( j== ( int ) t. length ( ) ) {
for ( int k= 0 ; k< n- cnt; k++ ) {
cout<< '0' ;
}
} else {
cout<< '.' ;
for ( int k= j; k< ( int ) t. length ( ) ; k++ )
{
cout<< t[ k] ;
}
}
}
return 0 ;
}
PAT1025(翻转链表-TODO: 使用node结构进行实现链表的翻转)
#include <iostream>
#include <algorithm>
using namespace std;
int main ( ) {
int first, k, n, temp;
cin >> first >> n >> k;
int data[ 100005 ] , next[ 100005 ] , list[ 100005 ] ;
for ( int i = 0 ; i < n; i++ ) {
cin >> temp ;
cin>> data[ temp] >> next[ temp] ;
}
int sum = 0 ;
while ( first != - 1 ) {
list[ sum++ ] = first;
first = next[ first] ;
}
for ( int i = 0 ; i < ( sum - sum % k) ; i + = k)
reverse ( begin ( list) + i, begin ( list) + i + k) ;
for ( int i = 0 ; i < sum - 1 ; i++ )
printf ( "%05d %d %05d\n" , list[ i] , data[ list[ i] ] , list[ i + 1 ] ) ;
printf ( "%05d %d -1" , list[ sum - 1 ] , data[ list[ sum - 1 ] ] ) ;
return 0 ;
}
PAT1026
PAT1027
PAT1028
PAT1029
PAT1030
PAT1031
PAT1032
PAT1033
PAT1034
PAT1035
PAT1036
PAT1037
PAT1038
PAT1039
PAT1040
PAT1041
PAT1042
PAT1043
PAT1044
PAT1045
PAT1046
PAT1047
PAT1048
PAT1049
PAT1050
PAT1051
PAT1052
PAT1053
PAT1054
PAT1055
PAT1056
PAT1057
PAT1058
PAT1059
PAT1060
PAT1061
PAT1062
PAT1063
PAT1064
PAT1065
PAT1066
PAT1067
PAT1068
PAT1069
PAT1070
PAT1071
PAT1072
PAT1073
PAT1074
PAT1075
PAT1076
PAT1077
PAT1078
PAT1079
PAT1080
PAT1081
PAT1082
PAT1083
PAT1084
PAT1085
PAT1086
PAT1087
PAT1088
PAT1089
PAT1090
PAT1091
PAT1092
PAT1093
PAT1094
PAT1095
PAT1096
PAT1097
PAT1098
PAT1099
PAT1100
PAT1101
PAT1102
PAT1103
PAT1104
PAT1105
PAT1106
PAT1107
PAT1108
PAT1109
PAT1110