IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 计算机天梯赛pat练习集L1-(1~30题) -> 正文阅读

[数据结构与算法]计算机天梯赛pat练习集L1-(1~30题)

1、hello word

#include<iostream>
using namespace std;
int main ()
{
    cout<<"Hello World!"<<endl;
    return 0;
}

2、打印沙漏

#include<iostream>

using namespace std;

int main ()
{
    int n,row=0;
    char c;
    cin>>n>>c;
    //1、计算一共多少行
    int i=0;
    for(i=0;i<n;i++)
        if((2*i*(i+2)+1)>n)
            {
                row=i-1;
                break;
            }
    for(int i=row;i>=1;i--)
    {
        for(int k=row-i;k>=1;k--) cout<<" ";
        for(int j=i*2+1;j>=1;j--) cout<<c;
        cout<<endl; 
    }
    for(int i=0;i<row;i++) cout<<" ";
        cout<<c<<endl;
        for(int i=1;i<=row;i++){
            for(int k=row-i;k>=1;k--) cout<<" ";
            for(int j=i*2+1;j>=1;j--) cout<<c;
            cout<<endl;
        }

    cout<<(n-(2*row*(row+2)+1));
    return 0;
}

3、个位数统计

// 时间:2022.04.02 23点47分

//第一次答案最后一个测试点无法通过是因为int类型无法存储1000位的数,所以需要换成string类型
// #include<iostream>
// using namespace std;
// int n,a[10];
// int main ()
// {
//     cin>>n;
//     while(n>0)
//     {
//         int b=n%10;
//         a[b]++;
//         n=n/10;
//     }
//     for(int i=0;i<10;i++)
//     {
//         if(a[i]!=0)
//         {
//             printf("%d:%d\n",i,a[i]);
//         }
//     }
//     return 0;
// }
#include<iostream>
#include<string>
using namespace std;

int a[10];//这个数组用来记录输入数字中每个数字出现的次数a[1]=2表示数字1出现了两次
string str;
int main ()
{
    cin>>str;
    for (int i = 0; i < str.size(); i++)
	{
		a[str[i]-48]++; //由于输入的是字符所以需要将字符转换成数字
	}
    for(int i=0;i<10;i++)
    {
        if(a[i]!=0)
        {
            printf("%d:%d\n",i,a[i]);
        }
    }
    return 0;
}

4、计算摄氏温度

// 时间:2022.04.02 23点55分
//C=5×(F?32)/9。
#include<iostream>

using namespace std;
int main ()
{
    int f;
    cin>>f;
    printf("Celsius = %d",5*(f-32)/9);
    return 0;
}

5、考试座位号

// 时间:2022.04.03 00点41分
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int m,n;
class Mes{
    public:
    Mes(string id,int testid,int gameid):m_id(id),m_testid(testid),
    m_gameid(gameid){};
    string m_id;//准考证号
    int m_testid;//试机座位号
    int m_gameid;//考试座位号
};
int main (){
    cin>>n;
    vector<Mes>mv;
    for(int i=1;i<=n;i++)
    {
        string str;
        int testid,gameid;
        cin>>str>>testid>>gameid;
         Mes ms(str,testid,gameid);
        mv.push_back(ms);
    }
    cin>>m;
    int ret;
    while(m--){
        cin>>ret;
        for(int i=0;i<n;i++)
        {
        if(ret==mv[i].m_testid)
            cout<<mv[i].m_id<<" "<<mv[i].m_gameid<<endl;
        }
    }
    return 0;
}

6、连续因子

// 时间:2022.04.03 11点59分
#include<iostream>
#include<vector>
#include<algorithm>
#include<cmath>
using namespace std;
int n;
vector<int>a;//每次遍历存放因子的容器
vector<int>ans;//存放最终答案的容器

bool isprime(int n)
{
    if(n<2)//1不是素数
        return false;
    for(int i=2;i<sqrt(n);i++)
        if(n%i==0)
            return false;
    return true;
}
int main ()
{
    cin>>n;
    int res=-1;//res用来记录当前数组的长度,初始化为负数
    //判断是否是素数,如果为素数则直接输出自己本身即可
    if(isprime(n)){
        cout<<1<<endl<<n;
        return 0;
    }
    for(int i=2;i<=n;i++)
    {
        int tmp=1;
        a.clear();//每次开始遍历时先要将a数组清空
        int cnt=0;//记录相邻因子的长度
        for(int j=i;j<=n;j++)
        {
            tmp*=j;
            if(n%tmp!=0)//如果发现无法被整除则退出循环,此时以i为开始的相邻因子的遍历已经结束
                break;
            a.push_back(j);
            cnt++;
            
        }
        if(res<cnt)//如果当前答案中的相邻因子的长度小于此时遍历的结果则进行更新
        {
        res=cnt;
        ans.clear();
        for(int i=0;i<a.size();i++)
            ans.push_back(a[i]);
         }
    }
    cout<<ans.size()<<endl;
    for(int i=0;i<ans.size();i++)
    {
        if(i==0)
            cout<<ans[0];
        else
            cout<<"*"<<ans[i];
    }
    return 0;
}

7、念数字

// 时间:2022.04.03 15点50分
#include<iostream>
#include<string>
#include<vector>
using namespace std;
int main()
{
    vector<string>s;
    s.push_back("ling");
    s.push_back("yi");
    s.push_back("er");
    s.push_back("san");
    s.push_back("si");
    s.push_back("wu");
    s.push_back("liu");
    s.push_back("qi");
    s.push_back("ba");
    s.push_back("jiu");
    
    string n;
    cin>>n;
    int i=1;
    if(n[0]=='-'){
        printf("fu");
    }
    else{
        cout<<s[n[0]-'0'];
    } 
    for(i;i<n.size();i++){
        cout<<" "<<s[n[i]-'0'];
    }
    return 0;
}

8、求整数段和

// 时间:2022.04.03 16点02分
#include<iostream>
using namespace std;

int main ()
{
    int a,b;
    cin>>a>>b;
    int k=0,sum=0;
    for(int i=a;i<=b;i++)
    {
        printf("%5d",i);
        k++;
        sum+=i;
        if(k%5==0)
            cout<<endl;
    }
    if(k%5!=0)//如果输出所有的整数之后,未到行尾则输出一个换行符
        cout<<endl;
    printf("Sum = %d\n",sum);
    return 0;
}

9、N个数求和

// 时间:2022.04.03 18点46分
#include<iostream>
using namespace std;

long long int gcd(long long int a, long long int b)
{
	return b ? gcd(b, a % b) : a;
}
int main()
{
	long long int N = 0, a = 0, b = 0, sum_a = 0, sum_b = 1, t;
	scanf("%lld", &N);
	for (int i = 0; i < N; i++)
	{
		scanf("%lld/%lld", &a, &b);
		//通分相加
		sum_a *= b;
		sum_a += a * sum_b;
		sum_b *= b;
		//约分
		t = gcd(sum_a, sum_b);
		sum_a /= t;
		sum_b /= t;
	}
	if (sum_a % sum_b == 0)//只有整数部分
		printf("%lld\n", sum_a / sum_b);
	else if (sum_a < sum_b)//真分数
		printf("%lld/%lld\n", sum_a, sum_b);
	else//假分数        
		printf("%lld %lld/%lld\n", sum_a / sum_b, sum_a % sum_b, sum_b);
	return 0;
}

10、比较大小

// 时间:2022.04.03 18点57分
#include<iostream>
#include<algorithm>
using namespace std;

int  main()
{
    int a,b,c;
    cin>>a>>b>>c;
    
    int mmin=min(a,b);
    mmin=min(mmin,c);

    int mmax=max(a,b);
    mmax=max(mmax,c);
        
    int mmid;
    if(a>mmin&&a<mmax)
        mmid=a;
    if(b>mmin&&b<mmax)
        mmid=b;
    if(c>mmin&&c<mmax)
        mmid=c;
    
    cout<<mmin<<"->"<<mmid<<"->"<<mmax<<endl;
    return 0;
}

11、A-B

// 时间:2022.04.04 15点46分

//第一种写法
// #include <stdio.h>
// #include<string.h>
// #include<stdlib.h>
// char delete(char *str,char target);
// int main(){
// 	char a[100000];
// 	char b[100000];
// 	gets(a);
// 	gets(b);
// 	int len1=strlen(a);
// 	int len2=strlen(b);
// 	for(int i=0;i<len2;i++){
// 		delete(a,b[i]);
// 	}
// 	printf("%s\n",a);
// 	return 0;
// }
// char delete(char *str,char target){
// 	int i,j=0;
// 	for(i=0;str[i]!='\0';i++){
// 		if(str[i]!=target){
// 			str[j++]=str[i];
// 		}
// 	}
// 	str[j]='\0';
// 	return str;
// }

#include<stdio.h>
#include<string.h>
int main(){
	char a[100000],b[100000];
	gets(a);
	gets(b);
    //遍历字符串a,然后在字符串b中查找a的每一个字符
    //如果查到则不输出,没查到则进行输出
    //学习大佬写法hhh
	for(int i=0;i<strlen(a);i++)
	{
		if(strchr(b,a[i]))//字符串查找函数
			continue;
		else 
			printf("%c",a[i]);
	}
	return 0;
}

12、计算指数

// 时间:2022.04.04 15点59分
#include<iostream>
#include<cmath>
using namespace std;

int n;
int main ()
{
    cin>>n;
   // int ret=pow(2,n);
    //printf("2^%d = %d\n",n,ret);
    printf("2^%d = %d\n",n,(int)pow(2,n));
    return 0;
}

13、计算阶乘和

#include<iostream>

using namespace std;
int func(int i)
{
    int sum=1;
    for(int j=i;j>=1;j--)
         sum*=j;
    return sum;
}
int main()
{
    int n,sum=0;
    cin>>n;
    for(int i=1;i<=n;i++)
        sum+=func(i);
    cout<<sum<<endl;
    return 0;
}

14、简单题

#include<iostream>
using namespace std;
int main ()
{
    cout<<"This is a simple problem."<<endl;
    return 0;
}

15、和奥巴马一起画方块

#include<iostream>
using namespace std;

int main ()
{
    int n;
    char c;
    scanf("%d %c",&n,&c);
    //判断n的奇偶性
    if(n%2==0){
    for(int i=1;i<=n/2;i++){
        for(int j=1;j<=n;j++)
            printf("%c",c);
        cout<<endl;
        }
    }
    else
     for(int i=1;i<=n/2+1;i++){//如果为奇数行数需要加一
        for(int j=1;j<=n;j++)
        printf("%c",c);
    cout<<endl;
    }
    return 0;
}

16、查验身份证

// 时间:2022.04.04 18点51分
#include<iostream>
#include<string>
using namespace std;
int n;
char arr[]={"10X98765432"};//校验码数组
int brr[]={7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};//权位数组
int main ()
{
    cin>>n;
    bool ret=true;//标志位,如果有错误的身份证号则变为false
    string str;
    while(n--)
    {
        str.clear();
        cin>>str;
        int ans=0;
        //每个位的权重:7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2

        for(int i=0;i<=16;i++)
            ans+=(str[i]-'0')*brr[i];
        ans%=11;
        if(str[17]!=arr[ans]){
            cout<<str<<endl;
            ret=false;
        }
        //校验码
        //Z:0 1 2 3 4 5 6 7 8 9 10
        //M:1 0 X 9 8 7 6 5 4 3 2

    }
    if(ret)
        cout<<"All passed"<<endl;
    return 0;
}

17、到底有多二

// 时间:2022.04.04 19点19分
#include<iostream>
#include<string>
using namespace std;

int main ()
{
    string str;
    cin>>str;
    int count=0,cnt=0;//count表示这个数中有几个数字2,cnt记录这个数的有效位数
    bool ret=false;//负数标志位初始化为正数
    //先找出这个数有几个数字2
    for(int i=0;i<str.size();i++)
        if(str[i]-'0'==2)
            count++;
    //判断是否为负数
    if(str[0]=='-')
        ret=true;
    float ans=0;
    if(ret)//为负数的情况
    {
        cnt=str.size()-1;
        ans=((float)count/cnt)*1.5;
        if(str[str.size()-1]-'0'==0//判断奇偶性
          ||str[str.size()-1]-'0'==2
          ||str[str.size()-1]-'0'==4
          ||str[str.size()-1]-'0'==6
          ||str[str.size()-1]-'0'==8)
            ans*=2;
            
    }
    else{//正数的情况
        cnt=str.size();
       
        ans=((float)count/cnt);
        if(str[str.size()-1]-'0'==0
          ||str[str.size()-1]-'0'==2
          ||str[str.size()-1]-'0'==4
          ||str[str.size()-1]-'0'==6
          ||str[str.size()-1]-'0'==8)
            ans*=2;
    }
    
    printf("%.2f%%\n",ans*100);
    return 0;
}

18、大笨钟

// 时间:2022.04.04 19点57分
#include<iostream>
using namespace std;
int main ()
{
    int hh,mm;
    scanf("%d:%d",&hh,&mm);
    if(hh>=0&&hh<12)//未到敲钟时间
    {
        printf("Only %02d:%02d.  Too early to Dang.",hh,mm);
        return 0;
    }
    if(hh==12&&mm==0)//特判一下小时为12并且分钟为0的情况
        {
        printf("Only %02d:%02d.  Too early to Dang.",hh,mm);
        return 0;
    }
    //小时为整点分钟为0的情况
    if(mm==0){
        for(int i=1;i<=hh-12;i++)
            cout<<"Dang";
    }
    //小时为整点分钟不为0的情况
    if(mm!=0)
        for(int i=1;i<=hh-11;i++)
            cout<<"Dang";
    cout<<endl;
            
    return 0;
}

19、谁先倒

// 时间:2022.04.04 22点44分
#include<iostream>

using namespace std;
int a,b;//a和b分别是甲乙两人的酒量
int n;//n轮比赛记录
int a_count,b_count;//a_count表示甲当前喝的酒量
int main()
{
    cin>>a>>b;
    cin>>n;
    while(n--){
        int as,ap,bs,bp;//as代表甲喊的数字,ap代表甲比划的数字
    //如果谁比划出的数字正好等于两人喊出的数字之和,谁就输了,输家罚一杯酒。
        cin>>as>>ap>>bs>>bp;
       
     //这里有两个易错点:1、当两个人同时输或者同时赢时都是不喝酒的
     //2、假设甲的最大酒量是1,但是当甲喝一次之后不会倒,只有当喝两次之后才会倒
        if((bp==(as+bs))&&(ap!=(as+bs)))//乙输而甲没输
            b_count++;
        if((ap==(as+bs))&&(bp!=(as+bs)))//甲输而乙没输
            a_count++;
        
        //判断两人是否有喝醉的人
        if(a_count==a+1)//甲醉了
        {
            cout<<"A"<<endl;
            cout<<b_count<<endl;
            return 0;
        }
        if(b_count==b+1)//甲醉了
        {
            cout<<"B"<<endl;
            cout<<a_count<<endl;
            return 0;
        }
            
    }
    return 0;
   
}

20、帅到没朋友

// 时间:2022.04.05  13点35分

//帅到没朋友.
//用a[i]表示i的朋友数,为0则为帅的没朋友的人(没有朋友或者自恋狂)
#include <stdio.h>
int main()
{
	int a[1000000]={ 0 };
	int N,K,M; 
	int i,n,m,sum=0;//sum是标志符,一举两用,在是否输出空格和是否找到太帅的人做标记 
	scanf("%d",&N); 
	while(N--)
	{
		scanf("%d",&K);
		for(i=1;i<=K;i++)
		{
			scanf("%d",&n);//避免有些只有一个人的朋友圈重复添加产生的影响
			if(K!=1)
			{
				a[n]+=K;//a[n]=1;//此人不帅
			}	 
		}
	}
	scanf("%d",&M);	
	while(M--)
	{
		scanf("%d",&m);
		if(a[m]==0)
		{
			if(sum!=0) printf(" ");//按输出格式的 
			printf("%05d",m);// '%05d',输出占五位,不足者用0补位  
			a[m]=1;//输出后,做标记,避免重复查询 
			sum++; 
		}		
	}
	if(sum==0) printf("No one is handsome");
	return 0;
} 

21、重要的事情说三遍

// 时间:2022.04.05 15点41分
#include<iostream>
using namespace std;
int main ()
{
    int n=3;
    while(n--){
        cout<<"I'm gonna WIN!"<<endl;
    }
}

22、奇偶分家

// 时间:2022.04.05 15点42分
#include<iostream>
using namespace std;
int n,j_sum,o_sum;
int main ()
{
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        int ret;
        cin>>ret;
        if(ret%2==0)
            o_sum++;
        else
            j_sum++;
    }
    cout<<j_sum<<" "<<o_sum<<endl;
    
    return 0;
}

23、输出GPLT

// 时间:2022.04.10 10点11分
// 思路:先统计字符串中需要输出字符个数,用一个数组顺序输出即可
#include<iostream>
#include<string>
using namespace std;

int arr[5];//arr[1]代表字符G的个数
int main ()
{

    string str;
    cin>>str;
    for(int i=0;i<str.size();i++)
    {
        if(str[i]=='G'||str[i]=='g')
            arr[1]++;
        if(str[i]=='P'||str[i]=='p')
            arr[2]++;
        if(str[i]=='L'||str[i]=='l')
            arr[3]++;
        if(str[i]=='T'||str[i]=='t')
            arr[4]++;
    }
    while(arr[1]!=0 || arr[2]!=0 || arr[3]!=0 || arr[4]!=0){//只要有一个字符还没有输出完就一直循环
        for(int i=1;i<=4;i++)
        {
            if(arr[1]!=0)
            {
                cout<<'G';
                arr[1]--;
            }
            if(arr[2]!=0)
            {
                cout<<'P';
                arr[2]--;
            }
            if(arr[3]!=0)
            {
                cout<<'L';
                arr[3]--;
            }
            if(arr[4]!=0)
            {
                cout<<'T';
                arr[4]--;
            }
        }
    }
    cout<<endl;
    return 0;
}

24、后天

// 时间:2022.05.06 21点50分
#include<iostream>
using namespace std;

int main ()
{
    int n;
    cin>>n;
    if(n==5){
        cout<<7<<endl;
        return 0;}
    cout<<(n+2)%7<<endl;
    return 0;
}

25、正整数A+B

// 时间:2022.04.10 15点47分
//注意:我们把输入中出现的第1个空格认为是A和B的分隔。题目保证至少存在一个空格,并且B不是一个空字符串
//这句话是个大坑,a有可能是空串
//测试点3一直没过
#include<iostream>
#include<string>
#include<sstream>
using namespace std;
string a,b;
bool check(string str)
{
    for(int i=0;i<str.size();i++)
    {
        //有时候可能是超出范围的数字、负数、带小数点的实数、甚至是一堆乱码。
        if(str[i]=='-' || str[i]=='.'|| str[i]-'0'<=0 || str[i]-'0'>=9)//检查负数乱码和带小数点的情况
            return false;
     } 
    //检查数字的范围是否在1~1000
    int ret;//字符串转换后的数字大小
    stringstream ss;
    ss<<str;
    ss>>ret;
    if(ret<1 || ret >1000)
        return false;
    
    return true;
}
int main ()
{
    cin>>a>>b;
    bool bool_a=check(a);
    bool bool_b=check(b);
    if(bool_a&&bool_b)//两个都是合法的情况
    {
        //123 + 456 = 579
        // int sum=atoi(a)+atoi(b);
        int aa,bb;//aa、bb是数字形式
        stringstream ss,tt;
        ss << a;
        ss >> aa;
        //cout<<aa<<endl;
        tt<<b;
        tt>>bb;
        //cout<<bb<<endl;
        cout<<a<<" + "<<b<<" = "<<aa+bb<<endl;
    }
    if(!bool_a&&bool_b)//b字符串合法
    {
        int bb;
        stringstream ss;
        ss<<b;
        ss>>bb;
        printf("? + %d = ?\n",bb);
    }
    if(bool_a&&!bool_b)//a字符串合法
    {
        int aa;
        stringstream ss;
        ss<<a;
        ss>>aa;
        printf("%d + ? = ?\n",aa);
    }
    if(!bool_a&&!bool_b)//两个都不合法
    {
        printf("? + ? = ?\n");
    }
    return 0;
}

26、I LOVE GPLT

// 时间:2022.05.06 21点43分
#include<iostream>
#include<string>
using namespace std;
int main()
{
    string str("I Love GPLT");
    for(int i=0;i<str.size();i++)
        cout<<str[i]<<endl;
    return 0;
}

27、出租

// 时间:2022.04.11 20点08分
#include<iostream>
#include<string>
#include<vector>
using namespace std;

string str;//电话号码
//第一个数组arr
vector<int>arr;
int a[10];//a[0]=0代表电号中没有0这个数字
int main ()
{
    cin>>str;
    //先统计一下电话号码中都有数字几
    for(int i=0;i<str.size();i++){
        a[str[i]-'0']++;
    }
    
    //输出第一个字符串
//     for(int i=0;i<10;i++)
//         if(a[i]!=0)
//             printf("%d:%d\n",i,a[i]);
   // int[] arr = new int[]{8,3,2,1,0};
    bool flag=false;//第一个数字前没有分号,用来处理这种情况
    printf("int[] arr = new int[]{");
    for(int i=9;i>=0;i--){
        if(!flag&&a[i]!=0){
            printf("%d",i);
            flag=true;
            arr.push_back(i);
            continue;
        }
        if(flag&&a[i]!=0){
            //printf(",%d",i);
            cout<<","<<i;
            arr.push_back(i);
        }
    }
    printf("};\n");
    
    //输出第二个字符串
    //int[] index = new int[]{3,0,4,3,1,0,2,4,3,4,4};
    
    flag=false;//第一个数字前没有分号,用来处理这种情况
    printf("int[] index = new int[]{");
    for(int i=0;i<11;i++)
    {
        //找到这个电话号码这一位数字在arr数字中对应的位置
        int ret=str[i]-'0';
        for(int j=0;j<arr.size();j++){
            if(!flag&&ret==arr[j]){
                printf("%d",j);
                flag=true;
                continue;
            }
            if(flag&&ret==arr[j])
                //printf("%,%d",j);
                cout<<","<<j;
        }
    }
    printf("};\n");
    return 0;
}

28、判断素数

//  时间:2022.04.12 22点49分
#include<iostream>
#include<cmath>
using namespace std;
int n,ret;
bool check(int m)
{
    int k=(int)sqrt( (double)m );
    for(int i=2;i<=k;i++)
        if(m%i==0)
            return false;//不是素数
    return true;//是素数
}
int main ()
{
    cin>>n;
    while(n--)
    {
        cin>>ret;
        if(ret==1)//特判1的情况,1不是素数
        {
            cout<<"No"<<endl;
            continue;
        }
        
        if(check(ret))//是素数
            cout<<"Yes"<<endl;
        if(!check(ret))
            cout<<"No"<<endl;
            
    }
    return 0;
}

29、是不是太胖了

//  时间:2022.04.12 22点49分
#include<iostream>
#include<cmath>
using namespace std;
int n,ret;
bool check(int m)
{
    int k=(int)sqrt( (double)m );
    for(int i=2;i<=k;i++)
        if(m%i==0)
            return false;//不是素数
    return true;//是素数
}
int main ()
{
    cin>>n;
    while(n--)
    {
        cin>>ret;
        if(ret==1)//特判1的情况,1不是素数
        {
            cout<<"No"<<endl;
            continue;
        }
        
        if(check(ret))//是素数
            cout<<"Yes"<<endl;
        if(!check(ret))
            cout<<"No"<<endl;
            
    }
    return 0;
}

30、一帮一

// 时间:2022.04.12 23点14分
#include<iostream>
#include<string>
#include<vector>
using namespace std;
class Person
{
  public:
    Person(int sex,string name):m_sex(sex),m_name(name){};
    int m_sex;
    string m_name;
    bool ret=false;//用来标记这个人是否已经输出过
};

int n;
vector<Person>mv;
int main ()
{
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        int sex;
        string name;
        cin>>sex>>name;
        mv.push_back(Person(sex,name));
    }
    for(int i=0;i<n/2;i++)
    {
        for(int j=n-1;j>=0;j--)
        {
            if((mv[i].m_sex + mv[j].m_sex==1)&&(mv[j].ret==false))//两个人性别和为1,并且没有被输出过
            {
                cout<<mv[i].m_name<<" "<<mv[j].m_name<<endl;
                mv[j].ret=true;//输出一次之后需要将这个标志位改为true
                break;//注意此时需要加break,只要找到最靠后的可以匹配的一个人就可以了,不加break,会将前面的人都输出一次
            }
        }
    }
    return 0;
}
  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-04-15 00:24:47  更:2022-04-15 00:24:53 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 7:46:43-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码