忙碌的民政局
比赛题目
时间限制:C/C++ 1000MS,其他语言 2000MS
内存限制:C/C++ 256MB,其他语言 512MB
分数:100
描述
2023年5月20日,是一个非常浪漫的日子,虽然今天是周六,但是今天民政局也是上班的,会有很多很多的人过来排队,进行结婚登记
国家法律规定:男不得早于二十二周岁,女不得早于二十周岁,否则不能结婚
今天来的人实在太多了,民政局的工作人员实在是忙不过来,想让小星设计一个程序,来帮忙实现判断每一对来登记的人能不能结婚
输入描述
第一行输入 n(1<=n<=20) 表示一共几对情侣排队
接下来 n 行 分别表示每一对情侣的出生日期,
前面的三个数字分别表示男生的出生年、月、日
后面的三个数字分别表示女生的出生年、月、日
(保证每个生日都是正确且有效的日期)
输出描述
输出 n 行,判断每一对情侣是否能够结婚
如果能够结婚 输出 Yes 不能结婚 输出 No
用例输入
2
2000 1 4 2003 5 20
1999 5 20 2005 5 21
用例输出
Yes
No
#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
int n=0,x=0,y=0,z=0,a=0,b=0,c=0,j=0,o=0;
cin>>n;
char w[n];
for(int i=0;i<n;i++){
cin>>x>>y>>z>>a>>b>>c;
if(2023-x>22){
j=0;
}
else{
if(2023-x<22){
j=1;
}
else{
if(y>=5&&z>=20){
j=0;
}
else{
j=1;
}
}
}
if(2023-a>20){
o=0;
}
else{
if(2023-a<20){
o=1;
}
else{
if(b>=5&&c>=20){
o=0;
}
else{
o=1;
}
}
}
if(j==0&&o==0){
w[i]='Yes';
}
else{
w[i]='No';
}
j=0;
o=0;
}
for(int i=0;i<n;i++){
if(w[i]=='s'){
cout<<"Yes"<<endl;
}
else{
cout<<"No"<<endl;
}
}
return 0;
}
请问我的代码怎么错了
char w[n] 这里应该是编不过,这是个栈区静态数组,你这样的方式需要char* w = new char[n];
应该是 <=5 <=20,生的早日期是小的,年纪越大出生日期数字越小
本次提问并没有给出一个具体的问题,只是要求提供代码和运行结果,并描述期望的正确输出结果和可能存在的问题。因此,我们无法提供一份具体的答案。但是,我们可以对参考资料进行简要的解读,并指出代码实现中的一些问题和需要注意的地方,以帮助阅读者更好地理解代码和解决问题。
段落0: 这段代码实现的是计数排序,核心思想是将要排序的数据分成几个桶,每个桶里的数据都比较相似,再对每个桶里的数据进行排序。这段代码的具体实现如下:
1.找出数组中的最大值和最小值。 2.根据最大值和最小值计算出值域大小,即新建一个桶数组,桶个数为max-min+1。 3.将数据分到不同的桶中,并记录每个桶中数据的个数。 4.对每个桶中的数据进行排序,可以使用冒泡排序或者快速排序等排序算法。 5.将每个桶中的数据按顺序合并到原数组中。
在实现计数排序时需要注意一些问题:
1.计数排序只适用于元素都属于某个区间的整数类型数据,否则需要对元素进行转换。 2.桶的数量取决于区间长度,如果区间过大可能会导致空间浪费,如果区间过小可能会导致桶溢出。 3.如果待排序数据分布不均匀,可能会导致某些桶中数据过多而导致效率变低,这时可以采用基数排序等其他排序算法。
段落1: 这段参考资料主要介绍了数组指针和指针数组的概念和区别。数组指针是一个指针,指向一个大小为n的数组,可以通过数组名直接访问数组中的元素;指针数组是一个数组,其中存储的是指针,每个指针可以指向一个元素或者一个数组。在实际应用中,数组指针常用于以数组形式传递参数、指向二维数组等。指针数组常用于动态内存管理、函数指针等。
需要注意的是,数组名代表数组首元素的首地址,但数组名本身不是指针,不能赋值和自增,只有指向数组的指针才有这些操作。
段落2: 这段代码实现的是快速排序中的划分函数,即根据给定的数组a和左右边界left和right,将数组划分为小于等于a[left]的左半区间和大于a[left]的右半区间,并返回枢轴pivot的位置。这段代码的具体实现如下:
1.首先找到数组中中间位置的数mini,把这个位置上的元素调整到a[left]的位置上。 2.以a[left]作为主元key,从右往左寻找第一个小于key的数,把这个数填入pivot位置,同时移动pivot指针至这个位置。 3.从左往右寻找第一个大于等于key的数,把这个数填入pivot位置,同时移动pivot指针至这个位置。 4.重复步骤2和3,直到left >= right,此时a[pivot] = key,左半区间小于等于key,右半区间大于key,返回pivot的位置。
在实现快速排序时需要注意一些问题:
1.划分函数的实现要保证左右边界的正确性,避免数组越界。 2.选择合适的key,可以用选取枢轴的方法,如三数取中法等,避免退化成冒泡排序。 3.快速排序的时间复杂度为O(nlogn),但是在最坏情况下(如已经有序)时间复杂度会退化为O(n^2),因此可以采用优化的快速排序,如随机化快速排序和双路快排等。
段落3: 这段代码实现的是冒泡排序,核心思想是通过相邻元素之间的比较和交换来把小的元素冒泡到前面,把大的元素沉到后面。这段代码的具体实现如下:
1.外层循环n-1次,每次找到当前最大的数,排到最后。 2.内层循环对相邻的两个数进行比较,如果后面的数小于前面的数,则交换两个数的位置。
在实现冒泡排序时需要注意一些问题:
1.冒泡排序的时间复杂度为O(n^2),效率比较低,但是代码实现较为简单。 2.可以加入标志位来优化冒泡排序,如果一次遍历过程中没有发生交换,则排序完成,否则继续遍历。 3.冒泡排序是一种稳定排序算法,即相同元素的相对位置不发生改变。
段落4: 这段代码实现的是插入排序,核心思想是将未排序的数据插入到已排序的数据中去,使得插入之后仍然是有序的。这段代码的具体实现如下:
1.外层循环n-1次,每次将第i+1个元素插入到前面的有序序列中。 2.内层循环将第i+1个元素与已排序序列中的元素进行比较,找到插入位置,并将该元素插入到该位置。
在实现插入排序时需要注意一些问题:
1.插入排序的时间复杂度为O(n^2),效率比冒泡排序稍高一些,但是插入排序对局部有序的数据排序较快。 2.可以使用二分查找优化插入排序,减少比较次数。 3.插入排序是一种稳定排序算法,适用于数据量较小或者数据已经部分有序的情况。