Cari nombor terkecil yang terbentuk dengan memasukkan nombor yang diberi

王林
Lepaskan: 2023-09-08 20:29:06
ke hadapan
758 orang telah melayarinya

Cari nombor terkecil yang terbentuk dengan memasukkan nombor yang diberi

Memasukkan nombor ke dalam nombor yang diberikan bermakna menambah nombor baharu pada nombor yang diberikan, sama ada sebelum, selepas atau di tengah nombor. Kami telah diberi nombor dan nombor dan mesti menambah nombor itu pada nombor itu dengan cara yang sekecil mungkin. Untuk memudahkan operasi sisipan, kami akan menukar nombor itu kepada rentetan. Tambahan pula, nombor yang diberikan juga boleh negatif, jadi kita perlu mengambil kira kes ini.

Contoh Contoh

Terjemahan bahasa Cina bagi

Input1

ialah:

Input 1

Given number: 124
Given digit: 3
Output: 1234 
Salin selepas log masuk

Penjelasan − Kami mempunyai empat tempat di mana kami boleh menambah nombor yang diberikan dan hasilnya boleh menjadi 3124, 1324, 1234, 1243. Daripada empat, yang terakhir adalah yang terkecil.

Terjemahan bahasa Cina bagi

Input2

ialah:

Input 2

Given number: -124
Given digit: 3
Output: -3124 
Salin selepas log masuk

Penjelasan − Kami mempunyai empat tempat di mana kami boleh menambah nombor yang diberikan dan hasilnya boleh menjadi -3124, -1324, -1234, -1243. Daripada empat, yang pertama adalah yang paling kecil.

Terjemahan bahasa Cina bagi

Pendekatan Naif

ialah:

Pendekatan Naif

Sekarang kita telah melihat contoh, mari kita lihat langkah-langkah yang akan kita lakukan untuk menyelesaikan masalah -

  • Pertama, kami akan semak sama ada nombor semasa adalah positif atau negatif.

  • Jika nombor semasa adalah negatif, kami akan menandakannya sebagai pembolehubah negatif dan menjadikan nombor semasa positif.

  • Selepas itu, kami akan menukar nombor semasa kepada rentetan dan memanggil asas fungsi berdasarkan sama ada nombor semasa adalah positif atau negatif.

  • Dalam fungsi ini, kami akan cuba menyesuaikan nombor pada setiap kedudukan dan menyemak sama ada nombor semasa lebih kecil atau lebih besar berdasarkan nombor positif atau negatif.

  • Jika nombor semasa adalah positif, kami akan cuba mencari nombor terkecil dan mengembalikannya.

  • Jika tidak, kita mencari nombor terbesar dan mengembalikannya dengan mendarab dengan -1.

Terjemahan bahasa Cina bagi

Contoh

ialah:

Contoh

#include <bits/stdc++.h>
using namespace std;
int findMin(string str, int d){
   string ans = str + to_string(d); // variable to store the answer     
   // traversing over the string 
   for(int i=0; i<= str.size(); i++){
      ans = min(ans, str.substr(0,i) + to_string(d) + str.substr(i));
   }
   return stoi(ans);
}
int findMax(string str, int d){
   string ans = str + to_string(d); // variable to store the answer     
   // traversing over the string 
   for(int i=0; i<= str.size(); i++){
      ans = max(ans, str.substr(0,i) + to_string(d) + str.substr(i));
   }
   return stoi(ans);
}
int minimumNumber(int n, int d){
   // checking for the negative number 
   int isNeg = 1;    
   if(n < 0){
      n *= -1;
      isNeg = -1;
   }    
   // converting the current number to string 
   string str = to_string(n);    
   if(isNeg == 1){
      return findMin(str,d);
   }
   else{
      return -1*findMax(str,d);
   }
}
int main(){
   int n = -124; // given number 
   int d = 3; // given digit     
   // calling to the function 
   n = minimumNumber(n, d);    
   cout<<"The minimum number after adding the new digit is "<<n<<endl;
   return 0;
}
Salin selepas log masuk

Output

The minimum number after adding the new digit is -3124
Salin selepas log masuk

Kerumitan masa dan ruang

Kerumitan masa kod di atas ialah O(N*N), dengan N ialah bilangan digit dalam nombor yang diberikan.

Kerumitan ruang kod di atas ialah O(N), dengan N ialah bilangan digit dalam nombor yang diberikan.

Kaedah yang cekap

Dalam kaedah sebelumnya, kami telah menyemak setiap nombor, mencari nombor pertama yang lebih besar daripada nombor yang diberikan, kemudian menambahnya dan mengembalikannya sendiri, yang merupakan kaedah yang cekap. Untuk nombor negatif, cari nombor yang lebih kecil, tambah dan kembalikan.

Jom lihat kod−

Terjemahan bahasa Cina bagi

Contoh

ialah:

Contoh

#include <bits/stdc++.h>
using namespace std;
int findMin(string str, int d){
   // traversing over the string 
   for(int i=0; i<= str.size(); i++){
      if(str[i]-'0' > d){
         return stoi(str.substr(0,i) + to_string(d) + str.substr(i));
      }
   }
   return stoi(str + to_string(d));
}
int findMax(string str, int d){
   // traversing over the string 
   for(int i=0; i<= str.size(); i++){
      if(str[i]-'0' < d){
         return stoi(str.substr(0,i) + to_string(d) + str.substr(i));
      }
   }
   return stoi(str + to_string(d));
}
int minimumNumber(int n, int d){
   // checking for the negative number 
   int isNeg = 1;
   if(n < 0){
      n *= -1;
      isNeg = -1;
   }   
   // converting the current number to string 
   string str = to_string(n);    
   if(isNeg == 1){
      return findMin(str,d);
   }
   else{
      return -1*findMax(str,d);
   }
}
int main(){
   int n = 124; // given number 
   int d = 3; // given digit     
   // calling to the function 
   n = minimumNumber(n, d);    
   cout<<"The minimum number after adding the new digit is "<<n<<endl;
   return 0;
}
Salin selepas log masuk

Output

The minimum number after adding the new digit is 1234
Salin selepas log masuk

Kerumitan masa dan ruang

Kerumitan masa kod di atas ialah O(N), dengan N ialah bilangan digit dalam nombor yang diberikan.

Kerumitan ruang kod di atas ialah O(N), dengan N ialah bilangan digit dalam nombor yang diberikan.

Kesimpulan

Dalam tutorial ini, kami melaksanakan kaedah untuk memasukkan nombor dalam nombor tertentu, iaitu menambah nombor baharu yang diberikan sebelum, selepas, atau antara nombor. Kami melihat dua kaedah, satu dengan kerumitan masa O(N*N) dan satu lagi dengan kerumitan masa O(N). Kerumitan ruang kedua-dua kaedah ialah O(N).

Atas ialah kandungan terperinci Cari nombor terkecil yang terbentuk dengan memasukkan nombor yang diberi. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:tutorialspoint.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan