2 条题解
-
3
午后,蝉鸣聒噪。飞跃指尖,行行代码于屏幕闪现。须臾,汗水浸湿衣襟。微握鼠标,颤巍巍击于“递交”按钮,心已跃动不已。忽,测评末,过。望及百分字样,丝丝欣喜流露于前……
(本题系通过练习题目之最后一题。曾因之困扰半月有余。终在开学际灵光闪现,成此代码。并做题解一篇,
谨以此文悼念我肝秃了的发(bushi))#include<cstdio> //输入、输出 方法头文件 #include<cstring> //strlen 方法头文件(获取 char 类型数组长度) #include<iostream> //swap 方法头文件(交换两个变量的值) #include<cmath> //fabs 方法头文件(求绝对值) using namespace std; int main(){ char str[200]; scanf("%s ", str); //输入 数字字符串 char a, b; scanf("%c %c", &a, &b); //输入 数字(注意这里需要设置为char类型变量,方便与str进行比较) //_index:存储字符在数组str中的位置下标;_ni:存储字符出现次数 int aindex[100]={}, ani=0, bindex[100]={}, bni=0; for(int i=0; i<strlen(str); i++){ //遍历str数组,找到所有与a/b相同的字符 if(str[i] == a) aindex[ani++] = i; if(str[i] == b) bindex[bni++] = i; } int l=200, sa, sb; //l:存储最短字符长度(=l-1);sa/sb:存储当截取字符串长度为l-1时相应数组下标 for(int i=0; i<ani; i++){ for(int j=0; j<bni; j++){ //fabs(n):计算n的绝对值 if(fabs(aindex[i] - bindex[j]) < l){ l = fabs(aindex[i] - bindex[j]); sa = aindex[i]; sb = bindex[j]; } } } //swap(m, n):交换变量 m 和 n 的值 if(sa >= sb) swap(sa, sb); //若a对应数组下标在b之后,交换sa和sb的值 for(int i=sa+1; i<sb; i++) printf("%c", str[i]); //输出 截取字符串 if(sa+1 == sb) printf("No char\n"); //截取字符串为空,输出“No char” else printf("\n"); //换行符(华而不实()()) return 0; }
屋外,骄阳凌空,少年用他那鲜活的生命同“万恶之源”——C++英勇搏击着。“日头没有辜负我们,我们也切莫辜负日头(沈从文 《边城》)”。
撒花~~~ ❀
-
1
#include<iostream> #include<string> #include<cmath> using namespace std; int main(){ string s,w; cin>>s; char x,y; cin>>x>>y; int m[201],n[201],a=0,b=0,p1,p2,num,k=250; for(int i=0;i<s.size();i++){//遍历字符串,分别读入两目标字符的下标 if(s[i]==x) m[a++]=i; if(s[i]==y) n[b++]=i; } for(int i=0;i<a;i++) for(int j=0;j<b;j++){//穷举两目标字符距离,更新最小差值及对应下标 num=abs(m[i]-n[j]); if(num<k){ k=num; p1=min(m[i],n[j]); p2=max(m[i],n[j]); } } if(k==1)//判断目标字符是否相邻 cout<<"No char"; else{ w=s.substr(p1+1,k-1); cout<<w; } }
- 1
信息
- ID
- 383
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 7
- 标签
- 递交数
- 148
- 已通过
- 39
- 上传者