1 条题解

  • 0
    @ 2023-6-11 12:18:09

    C++ :

    #include <bits/stdc++.h>
    using namespace std;
    
    //求s1到n要播几次 
    int num(string s1,int n){
    	 int c = 0;
    	 int i = 4;//s1取最后一位 
    	 int t;//由小到大拨过去次数 
    	 while(n != 0){
    	 	t =  abs((n % 10) - (s1[i] - '0'));
    	 	if(t <= 10 - t) c = c + t;
    		else c = c + 10 - t;
    		i--;
    	    n = n / 10;
    	 } 
    	 
    	 //剩余的数播回0 
    	 for(int j = i;j >= 0;j--){
    	 	  if(s1[j] == '9') c++;
    		  else c = c + (s1[j] - '0'); 
    	 }
    	 
    	 return c;
    }
    
    //素数判断 
    bool sushu(int n){
    	int i; 
    	if(n <= 1) return false;
    	for(i = 2;i <= sqrt(n);i++){
    		if(n % i == 0){
    			return false;
    		}
    	}
    	
    	return true;
    }
    
    
    
    int main(){
    	string s;
    	cin>>s;
    	int i,mi = INT_MAX,x,r; 
    	for(i = 2;i <= 99999;i++){
    		if(sushu(i)){
    			x = num(s,i);
    //			cout<<i<<" "<<x<<endl; 
    			if(x <= mi){
    				mi = x;
    				r = i;
    			}
    		}
    	}
    	
    	//输出r前面补0
    	string s2 = "";
    	while(r != 0){
    		s2 = s2 + (char)(r % 10 + 48);
    		r = r / 10;
    	} 
    	
    	
    	for(i = 1;i <= 5 - s2.size();i++){
    		cout<<0;
    	}
    	
    	for(i = s2.size() - 1;i >= 0;i--){
    		cout<<s2[i];
    	}
    }
    
    
    • 1

    信息

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