PTA刷题集

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;
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值