2022JK工作室1024欢乐AK赛题解

A,万众瞩目的你

 将大写字母转换为小写字母,可以根据ASCII值,大写字母ASCII值比小写字母小32,从而完成转换。

#include<stdio.h>
#include<string.h>
int main()
{
	char str[1010];
  	gets(str);
	int n=strlen(str);
	for(int i=0;i<n;i++)
	{
		if(str[i]<='Z'&&str[i]>='A')
		{
			str[i]=str[i]+32;
		}
	}
	printf("%s",str);
	return 0;
}

或者cin读入字符串

#include<string.h>
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
	char str[1010];
     cin>>str;
	int n=strlen(str);
	for(int i=0;i<n;i++)
	{
		if(str[i]<='Z'&&str[i]>='A')
		{
			str[i]=str[i]+32;
		}
	}
	printf("%s",str);
	return 0;
}

当然,你也可以通过使用strlwr函数完成,由于oj上没办法使用此函数成功提交,就不再赘述了,大家可以自己在编译器上试一试。

//??//还有点小问题,在这个oj上选c提交可以用gets,但是选c++不能用gets。//??//

B,无比幸运的你

只需将输入的n个数字进行判断,若同时含有5和2,输出“我好开心呀”;反之输出“呜呜呜”。

#include<iostream>
#include<algorithm>
using namespace std;
int n;
int a[55];
int main()
{
    cin>>n;
    for(int i=0;i<n;i++)  cin>>a[i];
    int x=0,y=0;
    for(int i=0;i<n;i++)
    {
        if(a[i]==5)   x=1;
        if(a[i]==2)   y=1;
    }
    if(x==1&&y==1)  cout<<"我好开心呀"<<endl;
    else cout<<"呜呜呜"<<endl;
    return 0;
}



C,独一无二的你

简单思维题,首先明白一点:每次操作都会减少两个元素,这个数组里的元素个数改变,但是总个数的奇偶不变,比如说本来8个数,8为偶数,进行一次操作减少两个数,变成6个,6仍然为偶数。

那么,个数的奇偶性与答案有什么关系呢??

假设本来数组有n个元素,x为这个数组中不重复元素的个数,那么如果x与n的奇偶性相同,我通过操作最多可以保留下x个不同的元素;反之,奇偶性不同的话我最多只能保留x-1个不同的元素,大家理解一下,不懂的话建议举个例子自己试一下就明白了。

#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
    int t;
    cin>>t;
    while(t--)   //t组测试数据
    {
        int n,c=0;
        cin>>n;
        int a[n];
        for(int i=0;i<n;i++)
        {
            cin>>a[i];
        }
        
        sort(a,a+n);    //对数组进行排序
        for(int i=0;i<n-1;i++)
        {
            if(a[i]!=a[i+1])
            c++;
        }
        c++;
        //if((n-c)%2==0)   或者
        if((n%2==0&&c%2==0)||(n%2==1&&c%2==1))
        cout<<c<<endl;
        else
        cout<<c-1<<endl;
    }
    return 0;
}

D,自信满满的你

输入n个数,求出这n个数的中位数。

首先,对这些数排序,根据小学知识可以求得中位数。

唯一需要注意的就是,如果为小数需要保留一位小数;若结果为整数,不需要保留小数位。

#include<iostream>
#include<algorithm>
using namespace std;
int n;
int a[110];
int main()
{
	cin>>n;
	for(int i=0;i<n;i++)  cin>>a[i];

	sort(a,a+n);

	if(n%2!=0)
	{
		printf("%d",a[n/2]);
	}
	else if(n%2==0)
	{
		if((a[n/2-1]+a[n/2])%2==0)   //中间两个数的和可以整除2
		{
			printf("%d",(a[n/2-1]+a[n/2])/2);
		}
		else  //中间两个数的和无法整除2 
		{
			printf("%.1f",(double)(a[n/2-1]+a[n/2])/2);
		}
	}
	return 0;
}

当然,这里仅仅展示了一种方法,你也可以通过其他的方法来判断结果是不是小数,需不需要保留一位小数。

E,心中有光的你

没错,跟大家想的一样,gmf学长才是最卷的那个人!!!

#include<stdio.h>
int main(){
  printf("gmf");
  return 0;
}

F,满怀热忱的你

两个时间点,求中间经过了几个小时,几分,没什么难的,直接减就完事了。

唯一需要注意的就是,当第二个时间点的分钟小于第一个时间点的分钟。这肯定难不倒聪明的你!

#include<iostream>
#include<algorithm>
using namespace std;
int a,b,c,d;
int main()
{
    cin>>a>>b>>c>>d;
    int x=c-a,y=d-b;
    if(y<0)
	{
		x--;
		y+=60;
	}
    cout<<x<<" "<<y;
    return 0;
}

以上就是关于此次的题解,以上代码仅供参考,答案不唯一,切勿照搬照抄!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值