L1-064 估值一亿的AI核心代码 (20 分) L2-029 特立独行的幸福 (25 分)

这篇博客探讨了字符串处理的技巧,包括大小写转换、特殊字符替换和单词处理。同时,讲解了一种数值循环的算法,涉及判断素数和避免死循环的方法。核心代码展示了如何实现这些功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

虽然这个问题很那啥,我还是需要提一下,使用的容器如果需要遍历不要忘记清空一下,或者直接在循环内声明!!!

估值一亿的代码

——字符串处理的学习还是由很远的路要走啊

该题有几个要求,我们需要分步进行。
在这里插入图片描述这里我们首先讲大小写和?与!的问题解决一下。
还用一个点就是,标点前面可能没有空格,我们需要手动给添加一下,防止切割出现错误。
这个应该是比较好实现的。
然后我们再将其他的进行替换:
核心代码:

该段代码的意思是将temp字符串根据空格分隔。
形成s1二维字符串数组。
string s1[1007],tmp;
		int ssindex=0;
		stringstream ss(temp);
		while(ss>>tmp){
			s1[ssindex++]=tmp;
		}

形成了字符串后,我们就可以进行替换了。
还有一个需要注意的地方就是输出的
AI:后面是有一个空格的。这里需要特殊判断一下。
因为默认下。标点符号的前面是不能有空格的,但是如果标点在第一个的话,他是必须加空格的。所以这里需要判断一下,第一个是不是标点。如果是的话,先输出一个空格。因为后面的输出都是没有空格的。
然后我们输单词的时候只需要在前面加上一个空格就ok了。因为单词前是必须有空格的。

具体代码如下:

#include <bits/stdc++.h>
using namespace std;
int n, m;
 
int main(){
	cin>>n;
	getchar();
	string a[n];
	for(int i =0;i<n;i++){
		getline(cin,a[i]);
	}
	
	for(int i =0;i<n;i++){
		string temp = a[i];
		cout<<temp<<endl<<"AI:";
		for(int j = 0;j<temp.length();j++){
			
			if(temp[j]=='?')
				temp[j]='!';
			if(isalnum(temp[j])){
				if(temp[j]!='I')
					temp[j]=tolower(temp[j]);
			}
			else{
				temp.insert(j," ");
				j++;
			}	
		}
		
		string s1[1007],tmp;
		int ssindex=0;
		stringstream ss(temp);
		while(ss>>tmp){
			s1[ssindex++]=tmp;
		}
		if(!isalnum(s1[0][0])){
			cout<<" ";
		}
		for(int i =0;i<ssindex;i++){
			//cout<<s1[i]<<endl;
			if(!isalnum(s1[i][0])){
				cout<<s1[i];
			}
			else if(s1[i]=="could"&&s1[i+1]=="you"){
				cout<<" I could";
				i++;
			}
			else if(s1[i]=="can"&&s1[i+1]=="you"){
				cout<<" I can";
				i++;
			}
			else if(s1[i]=="I"||s1[i]=="me"){
				cout<<" you";
			}
			else
				cout<<" "<<s1[i];
		}
		cout<<endl;
	}
	return 0;
}

思路来自:L1-8 估值一亿的AI核心代码 (20分)坑点分析+代码

特立独行的幸福

该题的意思就是找到不被经过的数,并且这个数的循环不能有死循环。
并且当该数为素数的时候值翻倍。并且,出现的被依附的不在范围内的不进行考虑。
在这里插入图片描述

#include <iostream>
#include <algorithm>
#include <cstring>
#include <map>
#include <string>
#include <cmath>
#define MAXN 100007
typedef long long ll;

using namespace std;
//vis用来记录不是幸福
//ch 用来判断循环
//xin用来输出
//ci用来记录遍历次数
int a,b, visit[MAXN],ch[MAXN],ci=0,xin[MAXN];


bool isprime(int x)
{
	int sum=0;
	for(int i=2;i<=sqrt(x+1);i++)
	{
		if(x%i==0) return false;
	}
	return true;
}

int main(){
	memset(visit,0,sizeof(visit));
	memset(xin,0,sizeof(xin));
	cin>>a>>b;
	
	for(int i =a;i<=b;i++){
		
		if(visit[i]) continue;
		
		int val = i,ci=0;
		int sum=0;
		memset(ch,0,sizeof(ch));
		while(1){
			sum=0;
			while(val){
	 			sum+=(val%10)*(val%10);
	 			val/=10;
	 		}
	 		//这里是记录经过的数,这些数都不是幸福
	 		if(sum<=b&&sum>=a) visit[sum]=1;
	 		//判断是否有死循环 退出
	 		if(ch[sum]){
	 			visit[i]=1;
	 			break;
			 }
			val=sum;
			ci++;
			ch[sum]=1;
			// 出现条件时退出
	 		if(sum==1){
	 			xin[i]=ci;
	 			if(isprime(i)) xin[i]*=2;
	 			break;
			}
		 }
	}
	
	int flag=0;
	
	for(int i =a;i<=b;i++){
		if(visit[i]==0&&xin[i]>0){
			cout<<i<<" "<<xin[i]<<endl;
			flag++;
		}
	}
	if(flag==0) cout<<"SAD"<<endl;


	return 0;
}

思路来自:
L2-1 特立独行的幸福 (25 分)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值