2 条题解

  • 3
    @ 2023-8-30 14:21:36

    午后,蝉鸣聒噪。飞跃指尖,行行代码于屏幕闪现。须臾,汗水浸湿衣襟。微握鼠标,颤巍巍击于“递交”按钮,心已跃动不已。忽,测评末,过。望及百分字样,丝丝欣喜流露于前……

    (本题系通过练习题目之最后一题。曾因之困扰半月有余。终在开学际灵光闪现,成此代码。并做题解一篇,谨以此文悼念我肝秃了的发(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
      @ 2023-10-2 23:07:50
      #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
      上传者