1 条题解

  • 0
    @ 2025-10-10 19:32:48

    C :

    #include<stdio.h>
    #include<string.h>
    int main()
    {
        int l, maxn, cnt,i,k,j,t,len;
        char s[60], *s1, *s2, *ans;
        scanf("%d", &l);
        scanf("%s",s);
       	len =strlen(s);
        maxn = cnt = 0;
     
        for(i = l; i <= len; i++)
    	{
            for(j = 0; j + i <= len; j++)
    		{
                cnt = 0;
                s1= &s[j];
                for(k = 0; k+i <= len; k++)
    			{
                    s2 = &s[k];
                    if(!strncmp(s1,s2,i))
                        cnt++;
                }
                if(cnt >= maxn)
    			{
                	if(cnt==maxn&&i>t)
                	{
                		t=i;
                    	ans = s1;
                    	maxn = cnt;
    				}else if(cnt > maxn)
    				{
    					t=i;
                       	ans = s1;
                    	maxn = cnt;
    				}
                    	
            	}
                else if(cnt == maxn && strlen(s1) > strlen(ans)){
                    ans = s1;
                }
            }
        }
     
        for(k=0;k<t;k++)
        {
        	printf("%c",*(ans+k));
    	}
    	
        return 0;
    }
    

    C++ :

    #include <bits/stdc++.h>
    using namespace std;
    //注意条件 :出现最大次数相等,输出步长最长的那个字符串 
    //           步长从L到 S.length()找起
    //           在同一步长内,如果相等找最先出现的 
    int main(){
    	int L;     //步长大于0
    	int a[60]; //一个暂时记录每个步长中相等的函数 
    	int b[60];//记录步长 
    	int c[60];//记录每个步长的最大值 
    	int maxl[60];//记录每个步长最符合条件的字符串出现的次数 
    	int index = 0;
    	//初始化b  c数组 
    	memset(b,0,sizeof(b));
    	memset(c,0,sizeof(c));
    	memset(maxl,0,sizeof(maxl));
    	//输入操作 
    	string s;//n<=60;S中的字符都是小写字母
    	scanf("%d",&L);//0<L<n
    	cin>>s;
    	//开始查找最大值
    	while(L<s.length()){
    		//初始化数组a
    		memset(a,0,sizeof(a)); 
    		//依次找出L步长内所有的可能相等的个数 
    		for(int i=0;(i+L)<=s.length();i++){
    			string s1 = s.substr(i,L);
    			for(int j=i;(j+L)<=s.length();j++){
    				string s2 = s.substr(j,L);
    				if(s1.compare(s2)==0) a[i]++;
    			}
    		}
    		//找出a数组中的最大值
    		int temp = 0;
    		for(int k=0;k<s.length();k++) {
    			if(a[k]>a[temp]) temp = k;
    		}
    		b[index] = temp;//从temp处开始步长为L的字符串符合条件
    		c[index] = L;
    		maxl[index] = a[temp]; 
    		index++; 
    		L++;
    	} 
    	//找出最合适的字符串
    	int max = 0; 
    	for(int i=0;i<s.length();i++){
    		if(maxl[i]>=maxl[max]) max = i;
    	}
    	//输出求得的结果
    	cout<<s.substr(b[max],c[max]); 
    } 
    
    • 1

    信息

    ID
    869
    时间
    1000ms
    内存
    512MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者