概述
真题1001:自己答案:
#include<stdio.h>
char s[100];
int main()
{
int a,b,t=1,i=0,k=0,sum;
scanf("%d%d",&a,&b);
sum=a+b;
if(sum<0);
{
t=-1;
sum=t*sum;
}
while(sum/10>0)
{
if(k==3)
{
s[i]=',';
++i;
k=k-3;
}
else
{
s[i]=sum%10;
++i;
++k;
sum/=10;
}
}
s[i]=sum;
char s1[100];
if(t==-1)
{
s1[0]='-';
}
for(int j=0;j<i+1; ++j)
{
s1[j+1]=s[i-j];
}
for(int j=0;j<i+2;++j)
{
if(s1[j]=='-')
printf("%c",s1[j]);
else if(s1[j]==',')
printf("%c",s1[j]);
else
printf("%d",(int)s1[j]);
}
}
其他答案:
#include <iostream>
#include<sstream>
using namespace std;
int main() {
stringstream ss;
int a, b;
cin >> a >> b;
ss<<(a+b);
string s = ss.str();
int len = s.length();
for (int i = 0; i < len; i++) {
cout << s[i];
if (s[i] == '-')
continue;
if ((i + 1) % 3 == len % 3 && i != len - 1)
cout << ",";
}
return 0;
}
总结:
PAT 1005:
我的代码:
#include <iostream>
#include<sstream>
#include<cstdio>
#include<string>
#include <typeinfo>
using namespace std;
int main()
{
int n,sum=0;
stringstream ss;
cin>>n;
while(n/10>0)
{
sum+=n%10;
n/=10;
}
sum+=n;
ss<<sum;
string s=ss.str();
// cout<<(int)s[1]; //char型字符无法直接强制int型为对应的整型,会变成对应的ascii码值。应该使用s[1]-'0'得到对应的整形
int len=s.length();
// cout<<len;
string out[len+1];
for(int i=0;i<len;i++)
{
switch ((int)s[i])
{
case 0:
out[i]="zero";
case 1:
out[i]="one";
case 2:
out[i]="two";
case 3:
out[i]="three";
case 4:
out[i]="four";
case 5:
out[i]="five";
case 6:
out[i]="six";
case 7:
out[i]="seven";
case 8:
out[i]="eight";
case 9:
out[i]="nine";
}
}
cout<<typeid(out[1]).name() << endl;
cout<<out[1] << endl;
// cout<<out<<endl;
// for(int i=0;i<len;i++)
// {
// cout<<typeid(out).name() << endl;
//
// }
}
//void out(sum,)
参考代码:
#include <iostream>
#include <vector>
using namespace std;
int main() {
string s[10] = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"};
string a;
cin >> a;
int sum = 0;
for(int i = 0; i < a.length(); i++) {
sum += (a[i] - '0');
}
vector<int> v;
while(sum != 0) {
v.push_back(sum % 10);
sum = sum / 10;
}
int len = v.size();
if(len == 0) { // if sum == 0 print zero else print s[v[len - 1]] 鍚﹀垯浼氭閿欒
cout << s[0];
} else {
cout << s[v[len - 1]];
}
for(int i = len - 2; i >= 0; i--) {
cout << " " << s[v[i]];
}
return 0;
}
我的代码修改后:
#include <iostream>
#include<sstream>
#include<cstdio>
#include<string>
#include <typeinfo>
using namespace std;
int main()
{
int n,sum=0;
stringstream ss;
cin>>n;
while(n/10>0)
{
sum+=n%10;
n/=10;
}
sum+=n;
ss<<sum;
string s=ss.str();
// cout<<(s[1]-'0');
int len=s.length();
// cout<<len;
string out[10]={"zero","one","two","three","four","five","six","seven","eight","nine"};
// cout<<out[5];
if(sum==0)
{
cout<<"zero";
}
else
{
cout<<out[s[0]-'0'];
for(int i=1;i<len;i++)
{
if(s[i]-'0'==0)
{
cout<<"zero";
}
else
cout<<" "<<out[s[i]-'0'];
}
}
}
总结:
1008
自己答案:
#include<iostream>
#include<cstdio>
#include<string>
#include<sstream>
using namespace std;
int a[100];
int main()
{
int n,t;
cin>>n;
for(int i=0;i<n;i++)
{
cin>>a[i];
}
// cout<<a[0];
t=a[0]*6+5;
// cout<<t;
for(int i=1;i<n;i++)
{
if(a[i]>a[i-1])
{
t+=((a[i]-a[i-1])*6+5);
}
else
{
t+=((a[i-1]-a[i])*4+5);
}
}
cout<<t;
}
其他答案:
总结:
1011
自己答案:
#include<iostream>
#include<cstdio>
#include<string>
#include<sstream>
using namespace std;
double a[3][3],b[3];
int main()
{
double t,mx=0;
int n;
for(int i=0;i<3;i++)
{
for(int j=0;j<3;j++)
{
cin>>a[i][j];
}
}
for(int i=0;i<3;i++)
{
for(int j=0;j<3;j++)
{
if(a[i][j]>mx)
{
mx=a[i][j];
n=j;
}
}
// cout<<mx<<" ";
// cout<<n;
if(n==0)
cout<<"W"<<" ";
else if(n==1)
cout<<"T"<<" ";
else
cout<<"L"<<" ";
b[i]=a[i][n];
}
t=(b[0]*b[1]*b[2]*0.65-1)*2;
printf("%.2lf",t); //结果为37.97总觉得是答案错了
}
其他答案:
总结:
1015
自己答案:
#include<cstdio>
#include<iostream>
#include<cmath>
using namespace std;
bool isPrime(int p);
int revers(int a,int b);
int main()
{
int n,d;
cin>>n;
cin>>d;
while(n>0)
{
if(isPrime(n)&&isPrime(revers(n,d)))
{
// cout<<revers(n,d);
cout<<"Yes"<<endl;
}
else
cout<<"No"<<endl;
cin>>n;
if(n<0)
break;
cin>>d;
}
}
bool isPrime(int p)
{
for(int i=2;i<p;i++)
{
if(p%i==0)
return false;
}
return 1;
}
int revers(int a,int b)
{
int s=0;
while(a/b>0)
{
s=s*b+a%b;
a=a/b;
}
s=s*b+a;
return s;
}
不知道为啥显示答案错误;
参考代码:
1019
自己代码:
#include<cstdio>
#include<iostream>
#include<cmath>
#include <vector>
using namespace std;
bool isP(int p,int t);
int main()
{
int n,d;
cin>>n>>d;
if(isP(n,d))
{
cout<<"Yes"<<endl;
}
else
cout<<"No"<<endl;
vector<int> pp;
int i=0;
while(n/d>0)
{
pp.push_back(n%d);
++i;
n=n/d;
}
pp.push_back(n);
for(int j=i;j>0;--j)
cout<<pp[j]<<" ";
cout<<pp[0];
return 0;
}
bool isP(int p,int t)
{
int p1=0,p2=p,a;
while(p/t>0)
{
p1=p1*t+p%t;
p=p/t;
}
p1=p1*t+p;
if(p1==p2)
return true;
else
return false;
}
参考代码;
总结:
这里使用到了容器:贼好用
1023
参考代码:
#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
using namespace std;
int main()
{
int i;
vector<int> n,n2;
string c;
cin>>c;
for(i=c.size()-1;i>=0;i--){
int t=c[i]-'0';
n.push_back(t);
}
int d=0;
for(i=0;i<n.size();i++){
if(n[i]*2+d>=10){
n2.push_back(n[i]*2-10+d);
d=1;
}else{
n2.push_back(n[i]*2+d);
d=0;
}
}
if(d==1){
n2.push_back(1);
}
if(n.size()!=n2.size()){
cout<<"No"<<endl;
for(i=n2.size()-1;i>=0;i--){
cout<<n2[i];
}
}else{
vector<int> a(n2);
sort(n.begin(),n.end());
sort(n2.begin(),n2.end());
int flag=1;
for(i=0;i<n.size();i++){
if(n[i]!=n2[i]){
cout<<"No"<<endl;
flag=0;
break;
}
}
if(flag==1){
cout<<"Yes"<<endl;
}
for(i=a.size()-1;i>=0;i--){
cout<<a[i]; //size的长度包含字符串的 /0。而len 的不包含;
}
}
return 0;
}
总结:这里还是使用了容器。输入长数字从里面取出数字的操作,可以借用字符串与容器完成,方便快捷。记得使用STL的排序算法,凡是涉及到顺序的;
函数返回容器的方法:指针容器:
#include<iostream>
#include<vector>
using namespace std;
/*
c++如何返回一个容器举例:
常用方法:将容器引用当作参数传入函数中
*/
void test(vector<int>&a,int n)
{
for(int i=0;i!=n;i++)
// a[i]=i;
a.push_back(i);
}
using namespace std;
int main()
{
int n=10;
vector<int> t;//定义vector容器
test(t,n);//将容器当参数,调用函数
for(size_t i=0;i!=t.size();i++)//输出容器内容,验证效果
cout<<t[i]<<" ";
return 0;
}
求容器的长度用.size(); int t=p1.size();;;
1027
自己代码:
#include<cstdio>
#include<iostream>
#include<iomanip>
#include<vector>
using namespace std;
void rever(vector<char>&p, int n);
int main()
{
int a,b,c;
cin>>a;
cin>>b;
cin>>c;
vector<char> p1;
cout<<"#";
rever(p1,a);
int t=p1.size();
if(t<2)
t=t+1;
p1.push_back(0);
for(int i=t-1;i>=0;--i)
{
cout<<p1[i];
}
vector<char> p2;
rever(p2,b);
int t2=p2.size();
if(t2<2)
t2=t2+1;
p1.push_back(0);
// cout<<t2;
for(int i=t2-1;i>=0;--i)
{
cout<<p2[i];
}
vector<char> p3;
rever(p3,c);
int t3=p3.size();
if(t3<2)
t3=t3+1;
p1.push_back(0);
for(int i=t3-1;i>=0;--i)
{
cout<<p3[i];
}
}
void rever(vector<char>&p, int n)
{
while(n%13>0)
{
char d;
switch(n%13){
case 0:
d='0';
break;
case 1:
d='1';
break;
case 2:
d='2';
break;
case 3:
d='3';
break;
case 4:
d='4';
break;
case 5:
d='5';
break;
case 6:
d='6';
break;
case 7:
d='7';
break;
case 8:
d='8';
break;
case 9:
d='9';
break;
case 10:
d='A';
break;
case 11:
d='B';
break;
case 12:
d='C';
break;
}
p.push_back(d);
n/=13;
}
}
参考答案:
#include <iostream>
using namespace std;
int main() {
char c[14] = {"0123456789ABC"};
printf("#");
for(int i = 0; i < 3; i++) {
int num;
scanf("%d", &num);
printf("%c%c", c[num/13], c[num%13]);
}
return 0;
}
总结:我的代码更好。但是凡涉及对应的使用switch一个一个对应的值。考虑到使用字符数组来对应更加方便:
最后
以上就是陶醉眼睛为你收集整理的PAT真题1001PAT 1005:1008101110151019 1027的全部内容,希望文章能够帮你解决PAT真题1001PAT 1005:1008101110151019 1027所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复