变换字母顺序

任务描述

输入一个字符串,再输入一个数组表示字符重新排序的顺序,按设定的顺序来输出一行新的字符串。要求所有数组都只能用new来申请内存。

说明

要求所有数组都只能用new来申请内存。

输入描述

第一行 $n$ 为正整数。 第二行一个字符串$ s_{0}, s_{1} \ldots s_{n-1}$ 保证其长度为n,只包含小写英文字母。 第三行n个整数p $ p_{0}, p_{1} \ldots p_{n-1}$ $=0 \leq p_{i}<n, \forall i=0 . . n-1$

输出描述

一行,答案

样例

  • 样例1
    • Input: 10 helloworld 1 3 5 7 9 0 2 4 6 8
    • Output: elwrdhlool
  • 样例2
    • Input: 28 kcaiibeikaninhscciaionaahnwh 1 27 4 10 20 15 13 9 12 14 6 0 2 3 19 16 24 11 5 18 25 21 8 22 26 23 17 7
    • Output: chinochansekaiichibannkawaii

样例代码

#include <iostream>
using namespace std;

int main(){
	int n;
	cin>>n;
	char *p = new char[n];
	int *a = new int[n];
	for (int i=0;i<n;i++){
		cin>>p[i];
	}
	for (int i=0;i<n;i++){
		cin>>a[i];
	}
    for (int i=0;i<n;i++){
		cout<<p[a[i]];
	}
    /*end your code*/
    return 0;
}

函数补全

任务描述

把右侧代码补充完整,包括在main函数之前添加2行代码以及在最后添加一个函数的定义,使得该程序能在一行里输出三个数:输出的第一个数是x(即用户输入的第一个数)减去y(即用户输入的第二个数)的差的个位数,第二个数是x的3倍,第三个数是y的2倍。

说明

只能填写myfun函数,不能修改main函数。

样例输入输出

  • Input: 18 5
  • Output: 3 54 10

参考代码

#include <iostream>
using namespace std;

int myfun(int* a, int* b);
// do not change main function
int main() {
    int x, y;
    cin >> x >> y;
    cout << myfun(&x, &y) << ' ';
    cout << x << ' ' << y;
    return 0;
}

int myfun(int* a, int* b) {
    // write your code here
    int x=(*a-*b)%10;
    *a*=3;
    *b*=2;
    return x;
}

敏感词过滤

任务描述

实现一个敏感词汇的程序。规则如下:

  • 接受的字符:①字母;②数字;③三个标点符号(均为英文字符) ,,.,”;④三个无用的符号@,#,$。
  • 对于敏感信息的词汇不区分大小写。
  • 若有用信息(字母、数字)中夹杂着无用的符号,也要辨认出并滤去。假如敏感词汇是mz,那么m#z也要滤去,但是输入ml,z不用滤去。
  • 过滤后若仍然存在敏感词汇,需要继续过滤,直到不存在敏感词汇

要求说明

要过滤的词汇只有L4和Fd这两个词,并且输入的字符串长度不大于200个字符。

输入输出样例

  • 样例1 input:@#$,." output:@#$,."

  • 样例2 input:#f@#$$#d# output:##

  • 样例3 input:f$#d26 output:26

  • 样例4 input:Lfd#48 output:8

参考代码

#include <iostream>
#include <cstring>
using namespace std;
int main(){
	char *p = new char[200];
	int *d = new int[200];
	cin.getline(p, 200);
    int n = strlen(p);
    for (int i=0;i<n;i++) d[i]=0;
    int epoch = 0;
    while (true){
    	//cout<<"this is epoch: "<<epoch<<"-- ";
    	epoch+=1;
    	int flag = 0;
	    for (int i=0;i<n;i++){
	    	if (d[i]==0){
		    	if (p[i] == 'L' || p[i] == 'l'){
		    		int clear = 1;
		    		int has = 0;
		    		for (int j=i+1;j<n;j++){
		    			if (d[j]==0){
			    			if (p[j]=='@'||p[j]=='$'||p[j]=='#'){
			    				clear = 1;
			    				//cout<<"this"<<epoch<<" "<<clear<<endl;
							}
							else if (p[j] == '4' && clear == 1){
								for (int k=i;k<=j;k++){
									d[k] = 1;
								}
								has = 1;
								break;
							}
							else {
								clear = 0;
								break;
							}
						}
					}
					if (has == 1) flag = 1;
		        }
		        
		        if (p[i] == 'F' || p[i] == 'f'){
		    		int clear = 1;
		    		int has = 0;
		    		for (int j=i+1;j<n;j++){
		    			if (d[j]==0){
			    			if (p[j]=='@'||p[j]=='$'||p[j]=='#'){
			    				clear = 1;
			    				//cout<<"this"<<epoch<<" "<<clear<<endl;
			    				//cout<<p[j]<<" ";
							}
							else if ((p[j] == 'd' || p[j] == 'D') && clear == 1){
								for (int k=i;k<=j;k++){
									d[k] = 1;
								}
								has = 1;
								break;
							}
							else {
								clear = 0;
								break;
							}
						}
					}
					if (has == 1) flag = 1;
		        }
		    }
		}
		if (flag == 0) break;
	}
	for (int i=0;i<n;i++){
		if (d[i] == 0){
			cout<<p[i];
		}
	}
}

Julian历法

任务描述

Julian历法是用年以及这一年中的第几天来表示日期。设计一个函数,将Julian历法表示的日期转换成月和日,如Mar 08(注意闰年的问题)。函数返回一个字符串,即转换后的月和日。如果参数有错,如天数为第370天,返回NULL指针,此使屏幕无打印输出。

英语月份缩写为:一月Jan.二月Feb.三月Mar.四月Apr.五月May.六月Jun.七月Jul.八月Aug.九月Sept.十月Oct.十一月Nov.十二月Dec.

样例

  • 样例1
  • input: 2020 1
  • output: Jan 01

  • 样例2 input: 1998 33 output: Feb 02

参考代码

#include <iostream>
#include <cstring> 
using namespace std;
 
char* julian(int year, int days);

int main() {
    int year, day;
    char * res;
    cin >> year >> day;
    res = julian(year, day);
    if (res) cout << res << endl;
    delete [] res;
    return 0;
}

char* julian(int year, int days){
	char monthen[12][5] = {
	"Jan","Feb","Mar","Apr","May",
	"Jun","Jul","Aug","Sept","Oct",
	"Nov","Dec"
	};
	int *a = new int[4];
	if (year < 0) return NULL;
	if (days < 1) return NULL;
	bool judge;
 
	if (year % 100 == 0){
		if (year % 400 == 0) judge = true;
		else judge = false;
	}
	else{
		if (year % 4 == 0) judge = true;
		else judge = false;
	}
	if (judge == true){
		if (days > 366) return NULL;
		int month = 0;
		for (int i : {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}){
			month = month + 1;
			if (days < i){
				int j;
				for (j = 1; ; j--){
					a[j] = (month % 10);
					month = month / 10;
					if (month == 0) break;
				}
				for (j = 3; ; j--)
				{
					a[j] = (days % 10);
					days = days / 10;
					if (days == 0) break;
				}
				break;
			}
			else days = days - i;
		}
	}
	else{
		if (days > 365) return NULL;
		int month = 0;
		for (int i : {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}){
			month = month + 1;
			if (days < i){
				int j;
				for (j = 1; ; j--){
					a[j] = (month % 10);
					month = month / 10;
					if (month == 0) break;
				}
				for (j = 3; ; j--)
				{
					a[j] = (days % 10);
					days = days / 10;
					if (days == 0) break;
				}
				break;
			}
			else days = days - i;
		}
	}
	char *res;
	char *p = new char[3];
	p[0] = ' ';
	p[1] = a[2] + '0';
	p[2] = a[3] + '0';
	strcat(res, monthen[a[0]*10+a[1]-1]);
	strcat(res, p);
	return res;
}