Κοινή χρήση τεχνολογίας

[Λίκου] Μία ερώτηση την ημέρα—Ερώτηση 70, Ανεβαίνοντας τις σκάλες

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

θέμα:

Ας υποθέσουμε ότι ανεβαίνετε σκάλες. Χρειάζονται n βήματα για να φτάσετε στην κορυφή του κτηρίου.

Μπορείτε να ανεβείτε 1 ή 2 σκαλιά τη φορά. Με πόσους διαφορετικούς τρόπους μπορείτε να ανεβείτε στην κορυφή ενός κτιρίου;

Ιδέα:

Πρώτα έγραψα μια συνάρτηση για να υπολογίσω τον αριθμό των ατόμων που σκαρφαλώνουν στον πρώτο και τον δεύτερο όροφο και μετά τα τακτοποίησα και τα συνόψισα, αλλά αργότερα άλλαξα το εύρος, αλλά το αποτέλεσμα ήταν λάθος.

Δεν ξέρω γιατί,

Αργότερα, όταν κοίταξα τα αποτελέσματα, μου φάνηκαν όλο και πιο οικεία. Δεν είναι αυτή η ακολουθία Fibonacci;

Θα γίνει αργότερα

Κωδικός αποτελέσματος:

  1. int climbStairs(int n) {
  2.   //int n,j;
  3.   int sum=0;
  4.   //scanf("%d",&n);
  5.   int f_1=1;
  6.   int f_2=2;
  7.   int f_n=0;
  8.   //int f_n_1=0;
  9.   if(n==0||n==1||n==2)
  10.   {
  11.       return n;
  12.   }
  13.   for(int i=1;i<=n-2;i++)
  14.   {
  15.       f_n=f_1+f_2;
  16.       //f_n_1=f_n+f_2;
  17.       f_1=f_2;
  18.       f_2=f_n;
  19.   }
  20.   return f_n;
  21.   // return 0;
  22.    
  23. }

Συνέχισε την καλή δουλειά! ! ! ! ! ! !

Το κεφάλι μου είναι άδειο.

Αν υπάρχει καλύτερη λύση, ενημερώστε με, σας ευχαριστώ!

Προσθέστε μια αναδρομική μέθοδο:

Αναδρομική σκέψη:

Το ίδιο με την ακολουθία Fibonacci, δηλαδή χρησιμοποιώντας την αναδρομή για να γράψετε Fibonacci και τελικά την έξοδο

Δείτε τον κωδικό:

  1. int *func(int n,int* f_n,int f_1,int f_2)
  2. {    
  3.   --n;
  4.   if(n == -1)
  5.       return n;  
  6.   f_n[n] = f_1+f_2;
  7.   f_1 = f_2;
  8.   f_2 = f_n[n];
  9.   func(n,f_n,f_1,f_2);
  10.   return f_n;
  11. }
  12. int climbStairs(int n) {
  13.    
  14.   int f_n[n];
  15.   func(n,f_n,0,1);
  16.   return f_n[0];
  17. }

Ελπίζω να είμαι καλύτερα σήμερα από χθες!

Συνέχισε! !