day36:找出质数、翻译字符串、分割数字并排序

找出质数

问题描述

明明学习数学已经有一段时间了。一次老师在课上讲了什么叫质数。质数就是大于等于2且只能被1和其本身整除的整数。明明觉得这很简单,以为这很容易掌握,于是就不多做练习。明的爸爸发现了这个问题,他想让明明多做练习,把质数这个知识点掌握牢固。但是,他也知道只是求质数会很无聊,明明一定不愿意多做。于是他想出了一个游戏,这个游戏叫“找出质数”,就是给明明一个数字串,要叫明明在这个数字串中找出一个最大的子串,要求这个子串是一个质数。 但是由于明明还太小,他的计算能力有限,因此明明的爸爸认为,找出长度大于4个字符的质数对明明来说太困难了。于是他降低了要求,只需找出小于10,000的最长的质数子串即可。 例如:有一个数字串为17,最大的子串就应该是17,因为1不是质数,7虽然是质数,但是7的长度只有1,17也是质数,它的长度为2,因此最大的子串就是17。 明明觉得这个游戏很有趣,就高兴地做了起来,明明的爸爸出了很多个数字串,由于数字串太多,所以明明爸爸自己找出最长的子串也要花很多的时间,于是明明的爸爸想让你帮他一个忙,写一个程序,找出数字串中最长的质数子串。

明明爸爸的问题可以归结为:输入一串数字,找出其中最长的不超过4个字符的质数子串。若有多个答案,则找出其中数值最大的一个。

总结

1. 难点在从小到大循环找子串,我通过两个循环实现

2. 字符串与整型的相互转换,通过sstream库实现

整型转换字符串:stringstream ss;ss << num;

字符串转换为整型:stringstream ss(s);ss >> num;

#include <bits/stdc++.h>
using namespace std; 
bool isPrime(int num){
	if(num <= 1){
		return false;
	}
	if(num == 2){
		return true;
	}
	if(num % 2 == 0){
		return false;
	}
	int sqrt_n = int(sqrt(num));
	for(int i = 3;i <= sqrt_n; i++){
		if(num % i == 0){
			return false;
		}
	}
	
	
	return true;
}

int lookformax_num(string s,int lm){
	int max_num = 0;
	int lenth = 1;
	
		while(lenth <= lm){
			
			for(int i = 0;i < s.size() ;i++){
				
				int num;
				string s2 = s.substr(i,lenth) ;
				stringstream ss(s2);
				ss >> num;
				if(isPrime(num)){
					if(num > max_num){
						max_num = num;
					}
				}
			}
			
		lenth++;
		
	}
		
	return max_num;
}

int main() {
	string s;
	while(cin >> s){
		int lm;
		int l;
		
		if(s.size() > 4){
			lm = 4;
		}else{
			lm = s.size() ;
		}
		
		cout << lookformax_num(s,lm) << endl;
		
		
	} 

    
    return 0;
}

翻译字符串

问题描述

在现代战争中,情报战越来越显示出它的重要性,敌我双方都想方设法得到对方的情报,然后一举歼灭对方。然而,随着加密技术的出现,对情报进行加密变得越来越频繁,想破解敌方的情报也越来越难。明明是一名富有经验的情报工作人员,他的主要任务就是破解敌方的情报,从而得到对己方有利的信息。在一次破解情报任务中,明明再次成功地破解了敌方的情报。明明的破解方法如下:一串以‘@’为结束标志的字符串,从左至右对其进行翻译,若字符串中当前字符是整数n(0≤n≤9),则表示将后一个字符重复n+1次,不论后一个字符是否为数字,且后一个字符无需再次翻译;若当前字符非数字,则表示自己,无需翻译,直接输出即可。最后,输出翻译完的字符串。

例如字符串为:2d352d@,因为第一个字符为数字2,则将后一个字符d输出3次,而d则不需再翻译,然后翻译3,3也是一个数字,则将后一个字符5输出4次,而5则不需再翻译,然后翻译2,2也是一个数字,将后一个字符d输出3次,而d则不需再翻译,最后一个字符为@,表示自己,直接输出即可,最后的输出为:ddd 555 5dd d@;(注:在翻译时,‘@’当作字符处理。) 这样翻译字符串的方法虽然简单,但是由于敌方的文件巨大,仅仅靠手工翻译是很难在短时间内完成的。于是明明就求助于你这位程序专家,按照明明提供的破译方法写一个程序,帮助明明快速把敌方文件翻译完成。

明明的问题可以归结为:按照文中提供的破译情报的方法,对字符串进行翻译,然后输出翻译后的字符串。

总结

1. 输出n+1数字次,可以理解为,输出这个数字次,然后再输出这个数字本身

2. 每输出三次都需要输出一个空格

3. 需要对最后一次输出三次的情况做另外的考虑,因为最后一次输出不需要空格,其实可以加一个bool first,仅对第一次输出的三个,前方不需要空格,之后的三连输出,前方需要空格

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

int main() {
	string s;
	while(cin >> s){
		int count = 0;
		for(int i = 0; i < s.size() ;i++){
			int times = 0;
			if(s[i] >= '0' && s[i] <= '9'){
				times = s[i] - '0';
				i++;
			}
			
			for(int j = 0;j < times;j++){
				cout << s[i];
				count++;
				if(count == 3){
					cout << " ";
					count = 0;
				}
			}
			
			cout << s[i];
			count++;
			if(count == 3 && i != s.size()-1){
				cout << " ";
				count = 0;
			}
			
		}
		
		cout << endl;
	}
    
    return 0;
}

分割数字并排序

问题描述

输入一行数字,如果我们把这行数字中的‘5’都看成空格,那么就得到一行用空格分割的若干非负整数(可能有些整数以‘0’开头,这些头部的‘0’应该被忽略掉,除非这个整数就是由若干个‘0’组成的,这时这个整数就是0)。

你的任务是:对这些分割得到的整数,依从小到大的顺序排序输出。

总结

与之前刷的一道读取字符串的题类似,最后一个(或者一串)的字符容易忽略掉,我们可以在后面给他加上一个特殊字符,然后进行判断是否要输出来处理

#include <bits/stdc++.h>
using namespace std;
void divde(vector<int> &div,string s){
	string s2;
	for(int i = 0;i < s.size() ;i++){
		
		if(s[i] != '5'){
			s2 += s[i];
		}
		else{
			int num;
			if(!s2.empty() ){
				stringstream ss(s2);
				ss >> num;
				s2.clear() ;
				div.push_back(num); 
			}
		}
		
		
	}

	
}


int main() {
	int n;
	while(cin >> n){
		while(n--){
			string s;
			vector<int> div;
			cin >> s;
			s += '5';
			divde(div,s);
			sort(div.begin() ,div.end() ); 
			bool first = true;
			for(int i = 0;i < div.size() ;i++){
				if(first){
					cout << div[i];
					first = false;
				}else{
					cout << " " << div[i];
				}
			}
			cout << endl;
		}	
	}
    
    return 0;
}

计算机英语翻译

三、输出硬件

计算机的显示器,可以简单的显示文本和图片,被分类(归类)为输出设备。但是触控屏,就既可以被分类为输入设备,也可以分类为输出设备,因为他可以接收输入,而且并且可以输出。Standalone显示器(独立),有时被称之为传感器(显示器)在笔记本电脑中特别受欢迎(在台式电脑中很常见)。笔记本、台式机、或者掌机的显示器中继承了(内置在系统单元中)系统单元,但是这些设备可能也接收额外的传感器(支持外接显示器)。显示器有常用的两个技术:LCD和LED。LCD(liquid crystal display)(液晶显示器)技术产生图片,是通过filtering光,通过一层liquid crystal细胞(通过一层液晶单元过滤光线来生成图像)。LCD屏幕的优点包括了显示清晰,低辐射释放emission,portability(便携性好),并且compactness(结构紧凑)适配度高。光的来源是通过背景版。大多数现代屏幕是backlit的LED(light-emitting diode)(发光二极管)技术,被市场称之为LED显示器。

Standalone n.独立

monitor n.显示器

filter v.过滤

portability n.便携性好

compactness n.紧凑

单词打卡

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值