Регистрирайте сеРегистрирайте се

елементарните задачи


 
   Форум за математика Форуми -> Информатика/Компютри
Предишната тема :: Следващата тема  
Автор Съобщение
c0nan
Начинаещ


Регистриран на: 27 Oct 2007
Мнения: 12

Репутация: 1.1

МнениеПуснато на: Sat Oct 27, 2007 3:12 pm    Заглавие: елементарните задачи

здравейте хора , тепърва почвам с програмирането , дайте някакви елементарни задачи за да се упражнявам
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
Реклама







Пуснато на:     Заглавие: Реклама

Върнете се в началото
Methuselah
VIP


Регистриран на: 17 Feb 2007
Мнения: 1057
Местожителство: София
Репутация: 105.9
гласове: 20

МнениеПуснато на: Sat Oct 27, 2007 3:45 pm    Заглавие:

Напиши програма която по дадено n смята n-тия член на редицата на Фибоначи.
1,1,2,3,5,8,13....
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
Cool Angel
Начинаещ


Регистриран на: 30 Sep 2007
Мнения: 36

Репутация: 5.6Репутация: 5.6Репутация: 5.6Репутация: 5.6Репутация: 5.6
гласове: 1

МнениеПуснато на: Sat Oct 27, 2007 7:57 pm    Заглавие:

Напиши програма която при въведени от клавиатурата измерения на правоъгълник да извежда периметърът и лицето на дадения правоъгълник.
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
Irrefutable
Напреднал


Регистриран на: 15 Jul 2007
Мнения: 298
Местожителство: София
Репутация: 28.8Репутация: 28.8Репутация: 28.8
гласове: 5

МнениеПуснато на: Sat Oct 27, 2007 8:51 pm    Заглавие:

c0nan, зависи колко си напред с математиката...
Задачата на Methuselah става за 3 нива на трудност.
-Рекурсия за начинаещи програмисти без идея от математика. С сложност О(е^N)
-Динамично програмиране за имащи известна програмистко-математическа мисъл. O(N)
-Разделяй и владей, за математиците. O(lgN) Wink
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение Посетете сайта на потребителя
r2d2
VIP


Регистриран на: 28 Feb 2007
Мнения: 1936
Местожителство: in the galaxy (Far Far Away)
Репутация: 311.2Репутация: 311.2
гласове: 179

МнениеПуснато на: Sat Oct 27, 2007 10:42 pm    Заглавие:

Първото го разбрах. Laughing
От второто и третото разбрах само, че Irrefutable много разбира!
Като гледам и някой други постове, разбирам че много хора, мноо разбират.

Не разбирам, значи съществувам! Wink
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
Grands
Редовен


Регистриран на: 31 Mar 2007
Мнения: 240

Репутация: 28.2Репутация: 28.2Репутация: 28.2
гласове: 5

МнениеПуснато на: Sun Oct 28, 2007 11:43 am    Заглавие:

Irrefutable, ще съм ти благодарен ако предложиш алгоритми по твоите идеи.
И аз съм wanna be програмист.
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
c0nan
Начинаещ


Регистриран на: 27 Oct 2007
Мнения: 12

Репутация: 1.1

МнениеПуснато на: Sun Oct 28, 2007 12:05 pm    Заглавие:

"редицата на Фибоначи" , кво ще рече това ?? някой ще ми обясни ли ?? иначе много съм зле с математика , ся в университета учиме за редици ама нещо не схващам кой знае колко Sad

А на Cool Angel задачата нали въвеждаме страните на правоъгълник и смята лице и периметър или пък има предвид нещо друго ??
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
v1rusman
Напреднал


Регистриран на: 18 Jul 2007
Мнения: 318

Репутация: 39.5Репутация: 39.5Репутация: 39.5Репутация: 39.5
гласове: 10

МнениеПуснато на: Sun Oct 28, 2007 12:14 pm    Заглавие:

Не,има предвид това,което ти си разбрал Laughing А за редицата на Фибоначи знам,че се определя,като всеки следващ член е сбор на предишнте два:
1,(вторият член е сбор от предишните два,но тъй като има само един предишен член=>)
1,(сборът на предишните два члена е 1+1=2)=>2,(2+1=3)=>3,5,8,13,21 и т.н.т
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
c0nan
Начинаещ


Регистриран на: 27 Oct 2007
Мнения: 12

Репутация: 1.1

МнениеПуснато на: Sun Oct 28, 2007 12:21 pm    Заглавие:

ахамм , интересно , ей после ще се опитвам да го напиша иначе програмата на Cool Angel сигурно ще е нещо такова :
Код:

import ccj.*;
public class prog1
{
   public static void main(String arg[])
   {
      int x,y;
      x = Console.in.readInt();
      y = Console.in.readInt();
      System.out.println("S=" + (x*y) + "\nP=" + (x+y)*2);
   }

}


иначе некакви жокери ще давате ли , например какво да ползвам в програмата Razz
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
Irrefutable
Напреднал


Регистриран на: 15 Jul 2007
Мнения: 298
Местожителство: София
Репутация: 28.8Репутация: 28.8Репутация: 28.8
гласове: 5

МнениеПуснато на: Sun Oct 28, 2007 2:07 pm    Заглавие:

c0nan , да не си СУ -> Приложна математика. Гледам Java учиш. Може да се окаже че сме колеги. Или пък да си в статистика?
А за програмата с лицето на правоъгълника направи да се въвеждат координатите на 2 срещуположни точки. х1, х2, у1, у2.
След това направи програма за намирането на сечението между 2 правоъгълника.

Grands, идеите са следните. За динамичното е ясно, имаш две променливи а и б , и в темп промелива слагаш а+б , после в а слагаш б а в б слагаш темп; Повтаряш N пъти и готово.
Това е и най-добрия начин да се намерят всички фибоначи числа в някакъв интервал, понеже за всяко ново имаш сложност О(1).
Ако ти трябва еднократното намиране на Fib(1560) примерно, обаче няма нужда да намираш на всички предишни.
Идеята е следната. Имаш матрицата:
1 1
1 0
Вдигаш я на N-та степен, съответно A12 става равно на A21 и на фибуначи от N.
Вдигането на N-та степен е операция която чрез разделяй и владей може да се направи с сложност O(lonN). Като Х^n = { Х^n/2 * Х^n/2, ако Х е четно ; Х^(n-1) * X^(n-1)*х , ако Х е нечетно}
Умножението на матрица от втори ред отнема константно време. И така стигаш до желаната желаната сложност.
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение Посетете сайта на потребителя
c0nan
Начинаещ


Регистриран на: 27 Oct 2007
Мнения: 12

Репутация: 1.1

МнениеПуснато на: Sun Oct 28, 2007 2:52 pm    Заглавие:

дам , в ПМ съм, аре ЛС Smile

иначе това с редиците по твоят начин е много яко , аз бях тръгнал да го мисля някакв много сложен начин с 2 цикъла , едния за нарастване до n-тия ред , другия е за връщане на 2 стойности и след всяко връщане добавям към temp-a , ама надали ще стане така Razz
Код:

import ccj.*;
public class prog1
{
   public static void main(String arg[])
   {
      int a , b , i , n;
      int temp;
      a = 1;
      b = 1;
      n= Console.in.readInt();
      for(i=1;i<n;i++)
      {
      temp = a + b;
      a = b;
      b = temp;
      System.out.println(temp);
      }
   }
}


това с правоъгълници нещо не го разбрах , я обясни малко повече , какво да въвеждаме
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
Irrefutable
Напреднал


Регистриран на: 15 Jul 2007
Мнения: 298
Местожителство: София
Репутация: 28.8Репутация: 28.8Репутация: 28.8
гласове: 5

МнениеПуснато на: Sun Oct 28, 2007 3:47 pm    Заглавие:

Целта е да намериш сечението между два правоъгълника. Тоест, координатите на новообразувания правоъгълник, лицето му и обиколката му.
Прави проверка дали У1 < У2 и Х1 < Х2 , защото никой не може да ти гарантира че на входа ще имаш верни данни. Много често на състезания по информатика хората пропускат да обърнат координатите. Тоест , на входа има винаги 2 координати по Х и 2 по У , без да се знае кой е ляв и кой десен и кой долен и кой горен.



сечение.GIF
 Description:
 Големина на файла:  3.96 KB
 Видяна:  6596 пъти(s)

сечение.GIF


Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение Посетете сайта на потребителя
c0nan
Начинаещ


Регистриран на: 27 Oct 2007
Мнения: 12

Репутация: 1.1

МнениеПуснато на: Sun Oct 28, 2007 4:08 pm    Заглавие:

интересно Smile, ще го пробвам довечера (ако не съм твърде пиян де Razz ) , мерси за графиката Wink

edited:
май ми хрумна решението , отна4ало въвеждаме 8 4исла х1 х2 х3 х4 , у1 у2 у3 у4 с условие 4е х1<x2 , x3<x4 , y1>y2 , y3>y4 , ако е изпълнено условие просто ще разгледаме случаи :
1 : х2<х3 => няма се4ение
2 : х1<х3 U х2<х4 => х= х2 - х3
U х2>х4 => х= х4 - х3
3 : х3<х1 U х2<х4 => х= х2 - х1
U x2>x4 => x= x4 - x1

Подобно разгледаме за у и ще получаваме у
и на-края лицето = х * у , Периметър = 2(х + у)

само съм го решил на лист де , още не съм я написал програма , ама нещо такова трябва да е нали Smile
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
c0nan
Начинаещ


Регистриран на: 27 Oct 2007
Мнения: 12

Репутация: 1.1

МнениеПуснато на: Sat Dec 01, 2007 5:58 pm    Заглавие:

имам една задача за решаване , дайте обяснение че нещо не съм схванал смисъла , ето задачата:

Да се изведат всичките цели числа в интервал от А до Б, на които като се премахне К-тата цифра от ляво на дясно, намаляват цяло число пъти .

демек примерно числото : abc , като махаме к-тата цифра значи може да е a,b или c, ще намалява n пъти , n да е цяло число ?? така ли означава ? значи трябва първо начално да фиксираме к-тата цифра или ще провериме к-пъти като махаме всеки път едната цифра ??? програмата сам ще се опитвам да напиша , само ми разяснете малко условието

Irrefutable, ако четеш поста , хелп Razz

edited : ех , и следващата задача също да ми разяснете :
За дадено ест ч-ло М с последна цифра различна от 0, да се изведат двойки числа А и Б, образувани от първите К-цифри и последните К-цифри на М , когато А и Б са делители на М .

според мене ако числото М = abcd , да се изведе двойките a и bcd , ab и cd , abc и d ако са делители на М , това ли означава ??
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
Irrefutable
Напреднал


Регистриран на: 15 Jul 2007
Мнения: 298
Местожителство: София
Репутация: 28.8Репутация: 28.8Репутация: 28.8
гласове: 5

МнениеПуснато на: Sat Dec 01, 2007 9:40 pm    Заглавие:

Това ми прилича на задача от ФМИ , по УП , така или иначе съм дал решенията на колегите вече........
Задачата за която става дума е zad2_3

Код:

import java.io.*;
import java.util.*;

public class Zadachki {

   public static void zad1(int x) { // deliteli
      for (int i = 1; i <= x; i++) {
         if (x % i == 0)
            System.out.print(" " + i);
      }
   }

   public static boolean zad2(int x) { // prime
      for (int i = 2; i * i <= x; i++)
         if (x % i == 0)
            return true;
      return false;
   }

   public static int zad3(int m, int n) { // gcd
      return n != 0 ? zad3(n, m % n) : m;
   }

   public static int zad4(int[] X) { // gcd for N
      int ret = X[0];
      for (int i = 1; i < X.length; i++) {
         ret = zad3(ret, X[i]);
      }
      return ret;
   }

   public static int zad5(int a, int b) { // lcm
      return a * b / zad3(a, b);
   }

   public static int zad6(int[] X) { // lcm for N
      int ret = X[0];
      for (int i = 1; i < X.length; i++)
         ret = zad5(ret, X[i]);
      return ret;
   }

   public static boolean zad7(int a, int b) { // vzaimno prosti
      return (zad3(a, b) == 1);
   }

   public static boolean zad8(int[] X) { // vzaimno prosti za K

      int min = X[0], i, c;
      for (i = 1; i < X.length; i++)
         if (min < X[i])
            min = X[i];

      for (i = 2; i <= min; i++) {
         boolean etd = true;
         for (c = 0; c < X.length; c++) {
            if (X[c] % i != 0)
               etd = false;
         }
         if (etd)
            return false;
      }
      return true;
   }

   public static int zad9(int A) { // obratnoto na 4islo
      int ret = 0;
      while (A > 0) {
         ret = ret * 10 + A % 10;
         A /= 10;
      }
      return ret;
   }

   public static boolean zad10(int A) { // dali 1 4islo e palindrom
      return A == zad9(A);
   }

   public static int zad11(int A) { // broq na cifrite
      if (A == 0)
         return 1;
      int count = 0;
      while (A > 0) {
         count++;
         A /= 10;
      }
      return count;
   }

   public static boolean zad12(int A) { // shtastlivo 4islo
      int k = zad11(A);
      int sum = 0;
      for (int i = 0; i < k / 2; i++) {
         sum += A % 10;
         A /= 10;
      }
      for (int i = 0; i < k / 2; i++) {
         sum -= A % 10;
         A /= 10;
      }
      return (sum == 0);
   }

   public static void zad13() { // savurshenno 4islo
      for (int num = 6; num <= 10000; num++) {
         int sum = 0;
         for (int d = 1; d < num; d++)
            if (num % d == 0)
               sum += d;
         if (sum == num)
            System.out.print(" " + num);
      }
   }

   public static void zad14() { // avtomorfno
      for (int num = 1; num <= 10000; num++) {
         int qu = num * num;
         qu -= num;
         int len = zad11(num);
         boolean avton = true;
         while (len-- > 0)
            if (qu % 10 != 0) {
               avton = false;
               break;
            }
         if (avton)
            System.out.print(" " + num);
      }
   }

   public static int sumdel(int A) { // pomo6tna za zad15
      int ret = 0;
      for (int i = 1; i <= A; i++)
         if (A % i == 0)
            ret += i;
      return ret;
   }

   public static void zad15(int A, int B) { // drujestveni
      for (int X = A; X <= B; X++)
         for (int Y = X + 1; Y <= B; Y++)
            if (sumdel(A) == B && sumdel(B) == A)
               System.out.print(A + "_" + B + "  ");
   }

   public static int zad16() {// 4isloto M
      return 142857;
   }

   public static void zad17(int M) { // M-Cifreni
      int L = (int) Math.pow(10.0, M - 1), R = L * 10 - 1;
      for (int n = L; n < R; n++) {
         int sum = 0;
         int t = n;
         while (t > 0) {
            sum += (int) Math.pow(t % 10, M);
            t /= 10;
         }
         if (sum == n)
            System.out.print("  " + n);
      }
   }

   public static void main(String[] args) {
      
      zad13();
   }
}

Код:
public class Zadachki_2 {

   public static int reverse(int A) {
      int ret = 0;
      while (A > 0) {
         ret = ret * 10 + A % 10;
         A /= 10;
      }
      return ret;
   }

   public static boolean prime(int A) {
      for (int i = 2; i * i <= A; i++)
         if (A % i == 0)
            return false;
      return true;
   }

   public static int count(int A) {
      int count = 0;
      do {
         count++;
         A /= 10;
      } while (A > 0);
      return count;
   }

   public static void zad2_1() {
      int num = 1, count = 0;
      while (count < 20) {
         int cnt = 0;
         int tmp = num;
         while (tmp > 0) {
            cnt += tmp % 2 == 0 ? 1 : -1;
            tmp /= 2;
         }
         if (cnt == 0) {
            System.out.print(num + " ");
            count++;
         }
         num++;
      }
   }

   public static boolean zad2_2(int A) {
      int B = reverse(A);
      for (int num = 1; num < B; num++)
         if (B % num == 0) {
            if (prime(num) && A % num != 0)
               return false;
         }
      return true;
   }

   public static void zad2_3(int A, int B, int K) {
      for (int i = A; i <= B; i++) {
         int tmp = i;
         int num = 0, inx = count(i) - K;
         while (tmp > 0) {
            if (inx != 0)
               num = num * 10 + tmp % 10;
            inx--;
            tmp /= 10;
         }
         num = reverse(num);
         if (i % num == 0) {
            System.out.print(i + "_" + num + "  ");
         }
      }
   }

   public static void zad2_4(int M) {
      if (M % 10 == 0)
         return;
      int L = count(M);
      for (int K = 2; K < L; K++) {
         int A = M / (int) Math.pow(10, L - K);
         int B = M % (int) Math.pow(10, K);
         if (M % A == 0 && M % B == 0) {
            System.out.print(M + "->" + A + "_" + B + "  ");
         }
      }
   }

   public static boolean prv(int x) {
      for (int i = 2; i < x; i++) {
         if (x % i == 0) {
            x /= i;
            if (x % i == 0)
               return false;
         }
      }
      return true;
   }

   public static void zad2_5() {
      int count = 0;
      for (int m = 1; count < 5; m++) {
         if (!prv(m))
            continue;
         int br = 0;
         for (int a = 1; a * a * a <= m; a++)
            for (int b = a + 1; b * b * b <= m - a * a * a; b++)
               if (b * b * b + a * a * a == m)
                  br++;

         if (br >= 2) {
            System.out.print(m + " ");
            count++;
         }
      }
   }

   public static boolean zad2_6(int[] A) {
      if (A.length == 0)
         return false;
      if (!prime(A[0]))
         return false;
      for (int i = 1; i < A.length; i++)
         if (!prime(A[i]) || A[i] == A[i - 1])
            return false;
      return true;

   }

   public static boolean zad3_7(double[] A) {
      if (A.length < 2)
         return true;
      double q = A[1] / A[0];
      for (int i = 2; i < A.length; i++)
         if (q != A[i] / A[i - 1])
            return false;
      return true;
   }

   public static double cosine(double angle) {
      angle %= 360;
      angle *= Math.PI / 180; // make angle in radians

      double ret = 1, add = 1, k = 1;
      do {
         add *= -angle * angle / (k * (k + 1));
         ret += add;
         k += 2;
      } while (Math.abs(add) > 0.0001);
      return ret;

   }

   public static void zad_prakt_1(int n) {
      int num = 2;
      for (int p = 1; p <= n; p++) {

         if (prime(num - 1))
            System.out.print(p + " ");
         num *= 2;
      }
   }

   public static void main(String[] args) {

      zad2_1();
      System.out.println();
      for (int i = 20; i < 50; i++)
         if (zad2_2(i))
            System.out.print(" " + i);
      System.out.println();
      zad2_3(100, 200, 2);
      System.out.println();
      for (int i = 7000; i < 13000; i++) {
         zad2_4(i);
      }
      System.out.println();
      zad2_5();
      System.out.println();
      int[] M = { 3, 7, 1, 13, 19, 37 };
      if (zad2_6(M))
         System.out.println("prosti sa i susednite sa razli4ni");
      double[] A = { 0.25, -0.5, 1, -2, 4, -8, 16, -32 };
      if (zad3_7(A))
         System.out.println("geometri4na progresiq e");
      System.out.println(cosine(0) + " " + cosine(210) + " " + cosine(60));

      zad_prakt_1(30);
   }

}

Код:
public class cikli2_zad5 {
   private static boolean prv(int x) {
      for (int i = 2; i * i < x; i++)
         if (x % i == 0) {
            x /= i;
            if (x % i == 0)
               return false;
         }
      return true;
   }

   private static String delts(int x) {
      String ret = "";
      for (int i = 2; i * i < x; i++)
         if (x % i == 0) {
            if (ret.length() > 0)
               ret += ".";
            ret += i;
            x /= i;
         }
      ret += "." + x;
      return ret;
   }

   private static String pow3str(int x) {
      return x + "." + x + "." + x;
   }

   public static void UP_cikli2_zad5_optimized() {

      int mxt = 311;
      int mxt3 = mxt * mxt * mxt;

      short[] A = new short[mxt3];
      for (int i = 0; i < A.length; i++)
         A[i] = 0;

      int[] pow3 = new int[mxt];
      for (int i = 0; i < mxt; i++)
         pow3[i] = i * i * i;

      for (int a = 1; a < mxt; a++)
         for (int b = a + 1; b < mxt && pow3[a] + pow3[b] < mxt3; b++)
            A[pow3[a] +  pow3[b]]++;

      for (int i = 1; i < mxt3; i++)
         if (A[i] >= 2)
            if (prv(i)) {
               System.out.print(i + " = " + delts(i));

               for (int a = 1; a < mxt; a++)
                  for (int b = a + 1; b < mxt && pow3[a] + pow3[b] <= i; b++)
                     if (pow3[a] + pow3[b] == i)
                        System.out.print("   =" + pow3str(a) + "+"
                              + pow3str(b));
               System.out.println();
            }
   }

   public static void main(String[] args) {
      UP_cikli2_zad5_optimized();

   }

}
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение Посетете сайта на потребителя
c0nan
Начинаещ


Регистриран на: 27 Oct 2007
Мнения: 12

Репутация: 1.1

МнениеПуснато на: Sat Dec 01, 2007 10:56 pm    Заглавие:

10х , остават ми 2_3 до 2_5 да напиша , ама като гледам всички са тук Very Happy , мерси много
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
c0nan
Начинаещ


Регистриран на: 27 Oct 2007
Мнения: 12

Репутация: 1.1

МнениеПуснато на: Sun Dec 02, 2007 12:14 pm    Заглавие:

zad2_3 ,която си написал май си пропуснал че ако числото завърши с 0 тогава 0-ата няма да се запазва в num , например ако i = 10200 и k = 3 ==> num = 1 , а трябва да е = 1000 , въвеждах една нова променлива n за запазване на 0-ите Razz

Код:

public static void zad2_3(int A, int B, int K) {
      for (int i = A; i <= B; i++) {
         int tmp = i,n=0;
         int num = 0, inx = count(i) - K;
         while (tmp > 0) {
            if (inx != 0) {
              num = num * 10 + tmp % 10;
              if(num==0) n++;
            }
            inx--;
            tmp /= 10;
         }
         num = (int) ( reverse(num) * Math.pow(10,n) );
         if (i % num == 0) {
            System.out.print(i + "_" + num + "  ");
         }
      }
}
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
Irrefutable
Напреднал


Регистриран на: 15 Jul 2007
Мнения: 298
Местожителство: София
Репутация: 28.8Репутация: 28.8Репутация: 28.8
гласове: 5

МнениеПуснато на: Sun Dec 02, 2007 4:35 pm    Заглавие:

Да има нещо такова Smile
Оправи си го елементарно е , ако псоедната цифра е 0 , правиш я на единица и после изваждаш 1-цата след деленията.
Работата е в тва че тези задачи никога не бих ги писал както съм ги писал. Тоест всичките се правят с стрингове и става по-бързо и с по-компактен код. Но трябваше да се съобразя до някаква степен с матеряла който сме взели.
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение Посетете сайта на потребителя
c0nan
Начинаещ


Регистриран на: 27 Oct 2007
Мнения: 12

Репутация: 1.1

МнениеПуснато на: Sun Dec 02, 2007 4:56 pm    Заглавие:

е , оправих си го , виж горния код , въвеждах n, всеки път ако num = 0 n се увеличава с 1 и накрая умножих inverse(num) с 10 на степен n ;

да , вярно е ,не сме взели кои знае колко много от материала .

иначе тук си ползвал нещо :
каква е тази библиотека : java.util.*;
а и този ред кво означава ? , от zad2_1 : cnt += tmp % 2 == 0 ? 1 : -1;
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
martosss
VIP Gold


Регистриран на: 17 Mar 2007
Мнения: 3937
Местожителство: Somewhere over the rainbow
Репутация: 424.2Репутация: 424.2
гласове: 213

МнениеПуснато на: Sun Dec 02, 2007 5:53 pm    Заглавие:

ето решението на Фибоначи което учим в училище, от вашите постове не видях да е решено по този начин, така че ще го реша както си знам Wink

Код:
#include<iostream.h>
int main()
{
    unsigned int n, a=0 ,b=0 ,c=1;
    cout<<"n=";
    cin>>n;
    for(int i=1;i<=n;i++)
    {
            a=b;
            b=c;         //по този начин въртя редицата от числа...
            c=a+b;     // ако го проиграете със някакви стойности ще видите как бачка ;)
    }
    cout<<c;
    return 0;
}


на мен си ми бачка Smile я кажете дали става? Very Happy
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
c0nan
Начинаещ


Регистриран на: 27 Oct 2007
Мнения: 12

Репутация: 1.1

МнениеПуснато на: Sun Dec 02, 2007 6:19 pm    Заглавие:

да , става , ама няма разлика м/у този код и онзи ,който съм писал горе , освен че почваш редицата от 1 (като задаваш 1 за с ) а аз от 2 (а=b=1, с = а+b =2) ,иначе алгоритъма е един и същ
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
Irrefutable
Напреднал


Регистриран на: 15 Jul 2007
Мнения: 298
Местожителство: София
Репутация: 28.8Репутация: 28.8Репутация: 28.8
гласове: 5

МнениеПуснато на: Sun Dec 02, 2007 7:41 pm    Заглавие:

Аз за фибоначи бих написал по-скоро нещо такова:

Код:
#include <iostream>
#include <vector>
using std::vector;
using std::cout;
using std::endl;
// Class Matrix is a small class implementing square matrices
// it defines multiplication (operator*) and integer
// power (operator^).
template<class T>
class Matrix {
private:
    vector<vector<T> > data;
public:
    Matrix(int size) : data(vector<vector<T> >(size,vector<T>(size,0))) {}
    size_t size(void) const { return data.size(); }
    vector<T> & operator[] (int i) { return data[i]; }
    const vector<T> & operator[] (int i) const { return data[i]; }
    const Matrix operator*(const Matrix& b) const {
        Matrix c(data.size());
        for(unsigned int i=0; i<data.size(); i++)
            for(unsigned int j=0; j<data.size(); j++)
                for(unsigned int k=0; k<data.size(); k++)
                    c[i][j]+=data[i][k]*b[k][j];
        return c;
    }
   const Matrix operator^(const int n) const {
      if(n>1) {
         Matrix a=*this^(n/2);
         return (n%2) ? a*a**this : a*a;
      } else return *this;
    }
};
// Function f returns n'th Fibonacci number
// It uses ALGORITHM 3A: MATRIX EQUATION
unsigned int f(int x) {
    Matrix<unsigned int> a(2);
    a[0][0]=a[0][1]=a[1][0]=1; a[1][1]=0;
    return (a^x)[0][0];
}
// Function f_print prints out n'th Fibonacci number
void f_print(int n) {
    cout << n << "th Fibonacci number is " << f(n) << endl;
}
// main is the entry point in C++
int main() {
    f_print(46);
    return 0;   
}


Кода е от http://cubbi.com/fibonacci/c++.html
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение Посетете сайта на потребителя
Irrefutable
Напреднал


Регистриран на: 15 Jul 2007
Мнения: 298
Местожителство: София
Репутация: 28.8Репутация: 28.8Репутация: 28.8
гласове: 5

МнениеПуснато на: Sun Dec 02, 2007 7:46 pm    Заглавие:

c0nan написа:
каква е тази библиотека : java.util.*;
а и този ред кво означава ? , от zad2_1 : cnt += tmp % 2 == 0 ? 1 : -1;

Във util се намира Scanner , а него го ползвам за парсване на входа
cnt += tmp % 2 == 0 ? 1 : -1;
е равносилно на
Код:
if (tmp%2 == 0)
    cnt = cnt + 1;
else
    cnt = cnt - 1;
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение Посетете сайта на потребителя
c0nan
Начинаещ


Регистриран на: 27 Oct 2007
Мнения: 12

Репутация: 1.1

МнениеПуснато на: Sun Dec 02, 2007 8:00 pm    Заглавие:

ахам ,тва е много яко , 10х Smile
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
Покажи мнения от преди:   
   Форум за математика Форуми -> Информатика/Компютри Часовете са според зоната GMT + 2 Часа
Страница 1 от 1

 
Идете на:  
Не Можете да пускате нови теми
Не Можете да отговаряте на темите
Не Можете да променяте съобщенията си
Не Можете да изтривате съобщенията си
Не Можете да гласувате в анкети
Може да прикачвате файлове
Може да сваляте файлове от този форум
Copyright © 2005-2021 math10.com.