Sistem dizaynı ilə bağlı müsahibə sualları o qədər açıq ola bilər ki, düzgün hazırlaşmağı bilmək çox çətindir. İndi satın aldıqdan sonra Amazon, Microsoft və Adobe-nin dizayn dövrlərini sındıra bilirəm Bu kitabı. Gündəlik bir yenidən nəzərdən keçirin dizayn sualı və söz verirəm ki, dizayn dövrünü sındıra bilərsiniz.
Mündəricat
Problem bəyanat
"Ardıcıl 1-lər olmadan bütün ikili sətirləri yaradın" məsələsində bir verdik tam k, bütün ikili yazdırmaq üçün bir proqram yaz strings ardıcıl 1'siz k ölçüsündə.
Giriş Formatı
Bir tam ədədi olan ilk və yalnız bir sətir.
Çıxış formatı
K boşluğu ilə ayrılmış bütün mümkün uzunluqlu ipləri (”“) çap edin.
Məhdudiyyətlər
- 1 <= N <= 15
misal
4
0000 0001 0010 0100 0101 1000 1001 1010
İzahat: Burada əvvəlcə uzunluğu 4 olan bütün simləri görürük.
0: 0000
1: 0001
2: 0010
3: 0011
4: 0100
5: 0101
6: 0110
7: 0111
8: 1000
9: 1001
10: 1010
11: 1011
12: 1100
13: 1101
14: 1110
15: 1111
İndi 3, 6, 7, 11, 12, 13, 14 və 15-in meyarlara riayət etmədiyini asanlıqla görürük, çünki hamısı ardıcıl 1-ə malikdir. Beləliklə, son cavabımız 0000, 0001, 0010, 0100, 0101, 1000, 1001, 1010-dur.
Alqoritm
- Yaradılan sətrin ölçüsü verilən ölçüyə bərabər olarsa, sətri çap edin.
- Əvvəlki simvol '1' olduqda, sətrin sonuna '0' qoyun və funksiyanı rekursiv olaraq çağırın.
- s [n] = '0'.
- stringsSizeK (k, s, n + 1)
- Əvvəlki simvol '0' olduqda, sətrin sonunda '1' və '0' işarələrini qoyun
1. s [n] = '0'
2. stringsSizeK (k, s, n + 1)
3. s [n] = '1'
4. stringsSizeK (k, s, n + 1)
- Sətrin uzunluğu K-ya bərabərdirsə, sətri çap edin.
Həyata keçirilməsi
Ardıcıl 1-lər olmadan bütün ikili simləri yaratmaq üçün C ++ proqramı
#include <bits/stdc++.h> using namespace std; void strings_form(int K, char s[], int n) { if(n==K) { s[n] = '\0' ; cout<<s<<" "; return; } if(s[n-1]=='1') { s[n]='0'; strings_form(K,s,n+1); } if(s[n-1]=='0') { s[n]='0'; strings_form(K,s,n+1); s[n]='1'; strings_form(K,s,n+1) ; } } void print_strings(int K) { if(K<=0) { return; } char s[K]; s[0]='0' ; strings_form(K,s,1) ; s[0]='1'; strings_form(K,s,1); } int main() { int N; cin>>N; print_strings(N); return 0; }
Ardıcıl 1-lər olmadan bütün ikili simləri yaratmaq üçün Java proqramı
import java.util.Scanner; class sum { static void strings_form(int k, char s[], int n) { if(n==k) { s[n]='\0'; System.out.print(s); System.out.print(" "); return; } if(s[n-1]=='1') { s[n]='0'; strings_form(k,s,n+1); } if(s[n-1]=='0') { s[n]='0'; strings_form(k,s,n+1); s[n]='1'; strings_form(k,s,n+1); } } static void print_strings(int n) { if(n<=0) { return; } char s[] = new char[n+1]; s[0]= '0'; strings_form(n,s,1); s[0]= '1'; strings_form(n,s,1); } public static void main(String[] args) { Scanner sr= new Scanner(System.in); int n = sr.nextInt(); print_strings(n); } }
5
00000 00001 00010 00100 00101 01000 01001 01010 10000 10001 10010 10100 10101
Ardıcıl 1-lər olmadan bütün ikili simləri yaratmaq üçün mürəkkəblik analizi
Zamanın mürəkkəbliyi
0 (2 ^ n) burada n, simli uzunluğu göstərən bizə verilən giriş nömrəsidir.
Kosmik Mürəkkəblik
o (n) burada n bizə verilən giriş nömrəsidir. Burada simli saxlamaq üçün bir char array elan edirik.
