PTA刷题集
1.L1-046 整除光棍
#include<iostream>
using namespace std;
int main()
{
int x,s=0,n=0;
cin>>x;
while(s<x)
{
s=s*10+1;
n++;//位数增1
}
while(true)
{
cout<<s/x;//输出商
s%=x;
if(s==0)break;//余数为0则结束
s=s*10+1;//余数末位添1
n++;//位数增1
}
cout<<' '<<n<<endl;
return 0;
}
L1-039 古风排版
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n,m,len;
char a[105][105];
string str;
cin >> n;
getchar();
getline(cin,str);
for(int i=0; i<105; i++)
for(int j=0; j<105; j++)
a[i][j]=' ';
len=str.size();
if(len%n==0)
m=len/n;
else
m=len/n+1;
for(int i=0; i<n; i++)
{
int k=0;
for(int j=i; j<len; j+=n)
{
a[i][k]=str.at(j);
k++;
}
}
for(int i=0; i<n; i++)
{
for(int j=m-1; j>=0; j--)
cout << a[i][j];
cout << endl;
}
return 0;
}
L1-023 输出GPLT
#include<bits/stdc++.h>
using namespace std;
int main()
{
char str[10005];
int book[4]= {0};
cin >> str;
for(int i=0; i<strlen(str); i++)
{
if(str[i]=='G'||str[i]=='g')
book[0]++;
else if(str[i]=='P'||str[i]=='p')
book[1]++;
else if(str[i]=='L'||str[i]=='l')
book[2]++;
else if(str[i]=='T'||str[i]=='t')
book[3]++;
}
while(1)
{
if(book[0]>0)
{
cout << "G";
book[0]--;
}
if(book[1]>0)
{
cout << "P";
book[1]--;
}
if(book[2]>0)
{
cout << "L";
book[2]--;
}
if(book[3]>0)
{
cout << "T";
book[3]--;
}
if(book[0]==0&&book[1]==0&&book[2]==0&&book[3]==0)
break;
}
return 0;
}
L1-027 出租
#include<bits/stdc++.h>
using namespace std;
int a[1005],b[1005],c[1005],d[1005];
int main()
{
string str;
while(cin>>str)
{
int k=0,len=0;
for(int i=0; i<11; i++)
{
a[str[i]-'0']=1;
}
for(int i=9; i>=0; i--)
{
if(a[i]==1)
{
b[k]=i;
c[i]=k;
k++;
len++;
}
}
for(int i=0; i<11; i++)
{
d[i]=c[str[i]-'0'];
}
printf("int[] arr = new int[]{%d",b[0]);
for(int i=1; i<len; i++)
{
printf(",%d",b[i]);
}
printf("};\nint[] index = new int[]{%d",d[0]);
for(int i=1; i<11; i++)
{
printf(",%d",d[i]);
}
printf("};\n");
}
return 0;
}
L1-020 帅到没朋友
#include<bits/stdc++.h>
using namespace std;
int n,m,cnt;
set<string> na;
set<string> res;
int main()
{
cin >>n;
for(int i=0;i<n;i++)
{
int t;
cin >> t;
string name;
for(int j=0;j<t;j++)
{
cin >> name;
if(t>=2)
res.insert(name);
}
}
cin >> m;
while(m--)
{
string p;
cin >>p;
if(res.find(p)==res.end()&&na.find(p)==na.end())
{
na.insert(p);
if(cnt!=0)
cout << " ";
cout <<p;
cnt++;
}
}
if(cnt==0)
cout << "No one is handsome";
return 0;
}
L1-009 N个数求和
#include<bits/stdc++.h>
using namespace std;
void split(long int &A, long int &B) {
long int g = __gcd(A, B);
A /= g;
B /= g;
}
int main(void) {
int N;
int long a, b, x, y;
cin >> N;
scanf("%ld/%ld", &a, &b);
for (int i = 1; i < N; i++) {
scanf("%ld/%ld", &x, &y);
a = a * y + x * b;
b = b * y;
split(a, b);
}
if (N == 1)
split(a, b);
if (a == 0)
cout << 0;
else if (a / b == 0)
cout << a << "/" << b;
else if (a%b)
cout << a / b << " " << a % b << "/" << b;
else
cout << a / b;
}
L1-011 A-B
#include <bits/stdc++.h>
using namespace std;
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int s[1005];
int main(int argc, char *argv[]) {
string a,b;
getline(cin,a);
getline(cin,b);
for(int i=0;i<b.length();i++){
s[b[i]-'0']=1;
}
for(int i=0;i<a.length();i++){
if(s[a[i]-'0']!=1){
printf("%c",a[i]);
}
}
cout<<endl;
return 0;
}
L1-006 连续因子
#include<iostream>
#include<math.h>
using namespace std;
int main()
{
long int n;
cin >> n;
int is_maxnum = sqrt(n);
for (int len = 12; len >= 1; len--)
{
for (int i = 2; i <= is_maxnum; i++)
{
long int ans=1;
int j;
for (j = i; j - i <= len - 1; j++) ans *= j;
if (n%ans == 0)
{
cout << len << endl;
int k;
for (k = i; k-i <= len-2; k++)
cout << k << "*";
cout << k << endl;
return 0;
}
}
}
cout << "1" << endl << n;
return 0;
}
L1-049 天梯赛座位分配
此题可以看成每个座位去配对学校中的学生,如果学校中的学生没有入座,可以对学生的座位进行讨论:
1.如果配对的座位的前一个坐的学生不是同一个学校的,则放一个学生在此座位上面。
2.如果配对的座位的前一个坐的是同一个学校的,则在此座位的下一个座位安排同一个学校的。
3.对已经坐了学生的座位要进行标记,如果所有座位都坐满则退出讨论。
#include<bits/stdc++.h>
using namespace std;
int a[10005];
int main()
{
int m[10005];
int n;
cin>>n;
vector<vector<int>> v(n+1);
int ans=1;
for(int i=1; i<=n; i++)
{
cin>>m[i];
}
while(1)
{
int flag=1;
for(int i=1; i<v.size(); i++)
{
if(v[i].size()<m[i]*10)
{
if(a[ans-1]!=i)
{
a[ans]=i;
v[i].push_back(ans);
ans++;
}
else
{
a[ans+1]=i;
v[i].push_back(ans+1);
ans+=2;
}
flag=0;
}
}
if(flag==1)
{
break;
}
}
for(int i=1; i<v.size(); i++)
{
cout<<"#"<<i<<endl;
for(int j=0; j<v[i].size(); j++)
{
if(j!=0&&j%10!=0)
{
cout<<" ";
}
if(j!=0&&j%10==0)
{
cout<<endl;
}
cout<<v[i][j];
}
cout<<endl;
}
}