1 条题解

  • 0
    @ 2022-6-17 16:34:01

    C :

    #include<stdio.h>
    #include<string.h>
    void main()
    {
    	int n,x,y,k,i,j;
    	char b[21][15];
    	scanf("%d",&n);
    	for(i=0;i<n;i++)
    		scanf("%s",b[i]);
    	for(i=0;i<n-1;i++)
    		for(j=i+1;j<n;j++)
    		{
    			x=strlen(b[i])>strlen(b[j])?strlen(b[j]):strlen(b[i]);
    			for(k=0;k<x;k++)
    			{
    			    if(b[j][k]!=b[i][k])
    				{
    		    		if(b[j][k]>b[i][k])
    					{
    					    strcpy(b[20],b[j]);
    		    	    	strcpy(b[j],b[i]);
    			    	    strcpy(b[i],b[20]);
    					}
    					break;
    				}
    				else
    					if(k==x-1&&strcmp(b[i],b[j])!=0)
    					{
    						if(b[i][x]=='\0')
    						{
    							strcpy(b[20],b[j]+x);
    							for(y=i;y<n;y++)
    							{
    								if(strcmp(b[20],b[y])>0)
    								{
    									if(y==n-1)
    									{
    		                     	    	strcpy(b[20],b[j]);
    		    	                	    strcpy(b[j],b[i]);
    			                        	strcpy(b[i],b[20]);
    			                	    	break;
    									}
    								}
    								else break;
    							}
    						}
    						else
    						{
    							strcpy(b[20],b[i]+x);
    							for(y=i;y<n;y++)
    							{
    								if(strcmp(b[20],b[y])<0) 
    								{
    		                     	    strcpy(b[20],b[j]);
    		    	                    strcpy(b[j],b[i]);
    			                        strcpy(b[i],b[20]);
    			                	    break;
    								}
    							}
    						}
    					}
    			}
    		}
    	for(i=0;i<n;i++)
    		printf("%s",b[i]);
    }
    

    C++ :

    #include<stdio.h>
    #include<string.h>
    char a[21][100];
    char c[100];
    int main()
    {
    	int n,j,i,q,p;
    	while(scanf("%d",&n)!=EOF)
    	{
    		getchar();
    		for(i=0;i<n;i++)
    			scanf("%s",a[i]);
    		for(i=0;i<n-1;i++)
    		{
    			for(j=i+1;j<n;j++)
    			{
    				p=0;
    				for(q=0;a[i][q]!='\0'&&a[j][q]!='\0';q++)
    				{
    					if(a[i][q]!=a[j][q])
    					{
    						p=1;
    						break;
    					}
    				}
    				if(p==1&&strcmp(a[i],a[j])<0)
    					{
    						strcpy(c,a[i]);
    						strcpy(a[i],a[j]);
    						strcpy(a[j],c);
    					}
    				if(strlen(a[i])>strlen(a[j]))
    				{
    					if(p==0&&a[i][q]<a[i][0])
    					{
    						strcpy(c,a[i]);
    						strcpy(a[i],a[j]);
    						strcpy(a[j],c);
    					}
    				}
    				else
    				{
    					if(p==0&&a[j][q]>a[j][0])
    					{
    						strcpy(c,a[i]);
    						strcpy(a[i],a[j]);
    						strcpy(a[j],c);
    					}
    				}
    			}
    		}
    		for(i=0;i<n;i++)
    			printf("%s",a[i]);
    		puts("");
    	}
    	return 0;
    }
    
    
    

    Pascal :

    var s,t:string;i,n:longint;a:array[1..20]of longint;s1:array[1..20]of string; 
    procedure qsort(l,r:longint); 
    var mid:string;i,j:longint; 
    begin
      mid:=s1[(l+r) div 2];i:=l;j:=r; 
      repeat
        while s1[i]>mid do inc(i); 
        while s1[j]<mid do dec(j); 
        if i<=j then begin t:=s1[i];s1[i]:=s1[j];s1[j]:=t;inc(i);dec(j);end; 
      until i>j; 
      if l<j then qsort(l,j); 
      if i<r then qsort(i,r); 
    end; 
    begin
      read(n); 
      for i:=1 to n do
        begin
          read(a[i]); 
          str(a[i],s1[i]); 
        end; 
      qsort(1,n); 
      for i:=1 to n do
        if s1[i]+s1[i+1]<s1[i+1]+s1[i] then begin t:=s1[i]; 
                                                  s1[i]:=s1[i+1]; 
                                                  s1[i+1]:=t; 
                                            end; 
      for i:=1 to n do write(s1[i]); 
      writeln; 
    end.
    

    [NOIP1998 提高]联接最大数/拼数

    信息

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