Friday, April 5, 2013

Сургуулийн шатны мэдээлэл зүйн олимпиад буюу Сорил №1-ийн бодолтууд

1. Зэрэг хуваагдал
2. Үг давт
3. Хурд хэмжигч
4. Куб нийлбэр
5. Ханой
6. Шагнал
7. Цифрүүдийн нийлбэр
8. Зоос
9. Утасны дугаар
10. Нийлбэр ол
гэсэн 10 бодлого оруулав. Эхний гурван бодлогыг бүх хүн бодож чадах байх гэж бодсон боловч тийм байсангүй. Эхний нэг бодлогыг л бүгд бодов. Бодолтыг сайн муу гэж ялгахгүй оруулах тул та бүхэн өөрт хэрэгтэй бодолтоо сонирхож үзээрэй. Өөрөөр хэлбэл бодлого оруулсан хүний бодолт мөн бодсон хүний бодолтыг бас оруулахыг хичээнэ. Мөн бодлого санал болгож дэвшүүлж байсан анд М.Түвшинсайхандаа баярлалаа.
Ингээд бодолтууд:
Зэрэг хуваагдал 
             if(n%40==0 && i%40==0) printf("YES"); 
                 else printf("NO");
Үг давт
             scanf("%d",&n);         
             for(i=1;i<=n;i++)
                printf("HOME\n");
Хурд хэмжигч (Нэгийнх нь бодолтыг шууд оруулав.)
#include 
#include 
using namespace std; 
int main() 
{ 
     int b;
     double m,a;
     scanf("%lf",&a);
     m=a*1.609344; 
     if(m>60 || b==6666 && b==8888 && b==9999)           printf("NORMAL"); 
      else printf("FAST");
     system ("pause");
     return 0;
}
Куб нийлбэр Энэ бодлогыг бодсон heyhey-ийн бодолт
    scanf("%d", &n);
    printf("%d", (n*(n+1)/2)* (n*(n+1)/2));
Мөн өөр нэг бодолт тестийн хувьд бага тест өгсөн тул давталт ашиглаж бодход болохгүй зүйл байгаагүй билээ.
   scanf("%d",&n);
  for(i=1;i<=n;i++)
  {
     s=s+(i*i*i);
  }
  printf("%d",s);
Ханой Энэ сорилд бодоогүй хоёр бодлогын нэг нь энэ байв. Хялбар рекурэнт томъёо гаргаад түүнээсээ ерөнхий гишүүний томъёо олход болох юм. Нийт боломжийн тоог a_n гэвэл a_n=2^n-1 болж бодогдоно.
Шагнал Энэ бодлого 2011 онд Мэдээлэл зүйн улсын олимпиадад сурагчдын төрөлд ирж байсан гэдгийг бичсэн байсан тул их хүндээр сэтгэсэн байж магадгүй нэг л хүн бодсон байв. Бас өгсөн жишээ тестийн хувьд нэлээн бүрхэг тест өгсөн. Дараа нь комент дээр арай дөхүүлэх үүднээс нэг жишээ тест нэмж хийсэн тул бодсон байж магадгүй ккк.
Түүний бодолтыг оруулав.
    scanf("%d", &n);
    printf("%d ", n+1);
    for(i=2;i<=n;i++)
    printf("%d ", i);
Цифрүүдийн нийлбэр Тийм ч хүнд биш тэхдээ давталт, массив, тэмдэгт мөр, тэмдэгтийн ASCII код зэрэг элементүүдийг мэдсэн үед бодож болно. Эдгээр нь хамгийн энгийн чухал элементүүд болно. Бас л нэг хүн бодсон байв. Түүний бодолтыг оруулав. Өгсөн тэмдэгт мөрийн уншаад түүнийг тэмдэгт болгоныг нэг нэгээр нь салгаад тэгийн /0/ код болох 48-ийг хасаж тоо болгоод нэмээд байна. Өөрөөр хэлбэл '8' гэсэн тэмдэгт 56 кодтой тул 8=56-48 болж 8 гэсэн тоо гарч байгаа юм.
  char st[1000000];
  int s=0,i;
  scanf("%s", st);
  for(i=0;i
       s=s+(st[i]-48);
  printf("%d", s);
Зоос  Нэг ч хүн бодоогүй хоёр бодлогын нэг нь энэ. Нийт боломжийн тоог a_n гэвэл a_n=2^n болох болно. Одоо өгсөн n тооны хувьд хоёрын зэргийг ол гэсэн бодлого болж байна. Хоёрын зэргийг яаж ч болж болно давталт болон pow функц хоёроор олох боломжтой.

  scanf("%d", &n);
  for(i=1;i<=n;i++)
  {
     s=s*2;
  }
  printf("%d", s); 

Утасны дугаар  Дараа нэмэлтийг бичхээс: Дараах хоёр хүний бодолтыг оруулав. Бичиглэл өөр болхоор оруулсан юм шүү. Нэг нь эмхтгээд нөгөө нь эмхтгээгүй бодолтууд.
demberelsaihan -ний бодолт
   scanf("%d",&n);
   printf("%d",10*n+9);
heyhey -ийн бодолт
  scanf("%d", &n);
  printf("%d", 9*(n+1)+n);
Нийлбэр ол Тайлбар маань Куб нийлбэртэй ялгаа байхгүй. Дараах хоёр бодолтыг оруулав.
demberelsaihan-ний бодолт:
  scanf("%d",&n);
  a=((n+1)*(2*n+1)*n/6+3*(n+1)*n/2-n);
  printf("%d",a);
namuun -ний бодолт
  cin>>n;
  for(i=1;i<=n;i++){
    s=(i*i+3*i-1);
    l=l+s;
 }
 cout<

Wednesday, April 3, 2013