《N诺机试指南》(八)日期、字符串、排序问题

1.日期问题:

输入:

例题:

 

代码:

#include <stdio.h>
#include <bits/stdc++.h>
struct node{
	int year, mouth, day;
}p;
int f[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

int main(){
	while( scanf("%d%d%d", &p.year, &p.mouth, &p.day)!=EOF ){
		//1.首先判断是不是闰年
		if( (p.year%400==0)||(p.year%4==0 && p.year%100!=0) ){
			f[2] = 29;//是闰年,二月为29天 
		}else{
			f[2] = 28;//不是闰年 
		}
		//2.判断输入的年月日是否合法
		int flag = 0; 
		//2.1.判断月份
		if( p.mouth<1 || p.mouth>12 ){
			flag = 1;
		}
		//2.2.判断日 
		for( int i=1; i<=12; i++ ){
			if( p.day<1 || p.day>f[i] ){
				flag = 1;
			}
		}
		if( flag ){
			printf("Input Error\n");
		}
		//3.计算当前日子是第多少天
		int sum = 0;
		int nowDay = p.day;
		for( int i=1; i<p.mouth; i++ ){
			sum += f[i];
		}
		sum += nowDay;
		printf("%d\n", sum); 	
	}
	return 0;
} 

注意点:

怎么判断闰年: 

(p.year%400==0)或者(p.year%4==0 && p.year%100!=0) 

2.字符串问题:

例题:

 

代码:

#include <stdio.h>
#include <string.h>
#include <bits/stdc++.h>

int main(){
	char s[105];
	gets(s);//输入一行文本
	int len = strlen(s); 
	for(int i=0; i<len; i++){
		//大写字母or小写字母 
		if(s[i]>='A' && s[i]<='Z'){
			s[i] += 3;
		}else if(s[i]>='a' && s[i]<='z'){
			s[i] += 3;
		}else{
		//其他的不处理 
			continue;
		}
	}
	puts(s);//输出一行文本
	return 0;
} 

3.排序问题:

sort函数:

 

例题:

 

解析:

 

代码:

#include <bits/stdc++.h>
using namespace std;

/* 
//问题一:稳定排序  
struct Student{
	string name;
	int score, id;
}stu[1005];

//自定义:从小到大函数 
bool FromShortToBig(Student a, Student b){
	if( a.score==b.score ){
		return a.id < b.id;//一样大,根据id判断 
	}
	return a.score < b.score;//哪个小哪个在前面 
} 
//自定义:从大到小函数 
bool FromBigToShort(Student a, Student b){
	if( a.score==b.score ){
		return a.id < b.id;//一样大,根据id判断 
	}
	return a.score > b.score;//哪个大哪个在前面 
} 

int main(){
	int n, model;
	cin >> n;
	cin >> model;
	//输入数据 
	for(int i=0; i<n; i++){
		cin >> stu[i].name >> stu[i].score;
		stu[i].id = i;//给id赋值 
	}
	//判断哪种模式 
	if( model==0 ){
		sort(stu, stu+n, FromBigToShort);
	}else{
		sort(stu, stu+n, FromShortToBig);
	}
	//打印 
	for(int i=0; i<n; i++){
		cout << stu[i].name << " " << stu[i].score << endl;
	}
	return 0;
}
*/

//问题二:先奇后偶、再按从小到大顺序排序
bool cmp(int a, int b){
	if( a%2==b%2 ){//同为奇数or偶数:按从小到大顺序排序 
		return a < b;
	}else{
		return a%2 > b%2;//不同:按先奇后偶顺序排序 
	}
} 

int main(){
	int n;
	cin >> n;
	int a[n];
	for(int i=0; i<n; i++){
		cin >> a[i];
	}
	sort(a, a+n, cmp);
	for(int i=0; i<n; i++){
		cout << a[i] << " ";
	}
	cout << endl;
	return 0;
}
posted @ 2020-03-01 13:25  Kimishima-Kana  阅读(265)  评论(0编辑  收藏  举报