求帮忙改进一下!
查看原帖
求帮忙改进一下!
937985
Teamo_me楼主2023/9/13 10:30

只有50,不知道为什么判断不了首位相同并且位数不同的情况。。 求助大佬帮忙改进一下代码

#include<bits/stdc++.h>
using namespace std;
const int N=5e2+20;
struct Re{
	int x;//输入的数 
	int y;//输入的数的首位
	int z;//输入的数的位数  
}a[N];
int n;
bool cmp(Re a,Re b){
	if(a.y==b.y&&a.z==b.z) return a.x>b.x;
	return a.y>b.y;
}
bool sw=0;
int main(){
	cin>>n;
	for(int i=1;i<=n;i++)
	cin>>a[i].x;
	int i=1;
	int m=1;
	while(i<=n){
		if(a[i].x/m>=1&&a[i].x/m<10&&a[i].x>=m){
			a[i].y=a[i].x/m;
			m=1;
			i++;
		}
		else
		m=m*10;
	}//a[i].y代表对应的a[i].x里的每个数的首位大小
	int k=1;
	int kk=10;
	int l=2;
	while(k<=n){
		if(a[k].x<10){
			a[k].z=1;
			k++;
		}
		if(a[k].x/kk>=1&&a[k].x>=kk&&a[k].x/kk<10){
			a[k].z=l;
			k++;
			kk=10;
			l=2;
		}
		else{
		    kk=kk*10;
		    l++;
	    }
	}//a[i].z代表对应的a[i].x里的每个数的位数大小
	int ans=0;
	int anss=0;
	sort(a+1,a+n+1,cmp);//按照首位从大到小排好序
	for(int i=1;i<n;i++){	
	    if(a[i].y!=a[i+1].y)
	    anss++;
        if(anss==n-1)
	    goto sc;
	}
	i=1;
	while(i<=n){
		if(a[i].y==a[i+1].y){
		    int x=a[i].x;
			int xx=a[i+1].x;
			int y=a[i].y;
			int yy=a[i+1].y;
			int z=a[i].z;
			int zz=a[i+1].z;
			//x代表首位相同的数中的第一个数 
	        //xx代表首位相同的数中的第二个数 
	        //y代表首位相同的数中的第一个数的首位 
	        //yy代表首位相同的数中的第二个数的首位 
	        //z代表首位相同的数中的第一个数的位数 
	        //zz代表首位相同的数中的第二个数的位数 
	    	while(y==yy){
                int f=1,ff=1;
			    int op=2,po=2;
			    int m=1;
			    sw=0;
	            while(op<z){
		            f=f*10;
		            op++;
	            }
	            while(po<zz){
		            ff=ff*10;
		            po++;
	            } 
	            x=x-y*z*f;
		        xx=xx-yy*ff;
				z--;
				zz--;	
	            m=1;
	            while(1){
	                if(x/m>=1&&x/m<10&&x>=m){
	                    y=x/m;
                        break;
	                }
	                else
	                m=m*10;
	            }
	            m=1;
	            while(1){
		            if(xx/m>=1&&xx/m<10&&xx>=m){
		                yy=xx/m;
		                break;
	                }
                    else
                    m=m*10;
                }
                if(y<yy)
	            sw=1;	
			}
		    if(sw==1){
		    	ans=a[i].x;
		    	a[i].x=a[i+1].x;
		    	a[i+1].x=ans;
			}
		}
		i++;
	}
	sc:for(int i=1;i<=n;i++)
	cout<<a[i].x;
	return 0;
	for(int i=1;i<=n;i++)
	cout<<a[i].x;
	return 0; 
}
2023/9/13 10:30
加载中...