Announcement

Collapse
No announcement yet.

[Lập trình newbie] Mỗi ngày một bài toán (số 2)

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • [Lập trình newbie] Mỗi ngày một bài toán (số 2)

    Bài 1 đã kết thúc tốt đẹp .
    Các bạn hãy tiếp tục với bài số 2 nhé

    Input: Nhập vào 1 số N, -10000<N<10000
    Output: Tính tổng các số từ 1 đến N.
    Time limit: 2s, memory: 16MB

    Sample:
    +Input: -3
    +Output: -5
    Chiến thôi nào :brick:.
    Facebook: Kiều Thắng
    Google Plus: Kiều Thắng
    Thông tin về du học các nước: Du học.


  • #2
    thôi té... ko giải nữa ^_^, bài này cũng giống bài lúc nãy :funny:

    bonus các bạn cái này (n/2)*(n+1)....
    Last edited by 08520229; 07-07-2012, 20:54.
    Một khẩu súng giữ hai trời Nam Bắc,
    Một dấu chân in màu đất hai miền.

    ------------------------------------------------------

    Comment


    • #3
      Originally posted by 08520229 View Post
      thôi té... ko giải nữa ^_^, bài này cũng giống bài lúc nãy :funny:

      bonus các bạn cái này (n/2)*(n+1)....
      Công thức đó chỉ đúng với các số dương thôi mà anh. Đề y/c -10000<N<10000 mà.
      Theo em thì nếu số không âm ta dùng công thức trên, còn trường hợp N <= 0 thì S = -( (|n|*(|n|+1) /2) - 1)

      Comment


      • #4
        Bài này chỉ có 1 điểm đáng lưu ý là -10000 < N < 10000. Nếu không để ý, chỉ dùng công thức N(N+1)/2 thì sẽ bị sai 1 số test. Do đó, cần chia trường hợp:
        N > 0: N(N+1)/ 2
        N <= 0: for(int i = 1; i >= N; i--) sum += i;
        Đề ghi không chính xác "Tính tổng các số từ 1 đến N.". Đáng lẽ phải là "Tính tổng các số nằm giữa 1 và N".

        Em nghĩ anh nên chọn những bài khó hơn 1 chút để topic sôi động hơn.
        University of Information Technology
        Cao Văn Nhàn _ CE10520355
        SĐT: 0188 403 4943

        Email: caovannhan2002@gmail.com

        Comment


        • #5
          Originally posted by 11520046 View Post
          Công thức đó chỉ đúng với các số dương thôi mà anh. Đề y/c -10000<N<10000 mà.
          Theo em thì nếu số không âm ta dùng công thức trên, còn trường hợp N < 0 thì S = -( (|n|*(|n|+1) /2) - 1)
          thì đã bảo là bonus rồi mà, giải huỵch tẹt ra thì nói làm gì nữa ^_^...
          Một khẩu súng giữ hai trời Nam Bắc,
          Một dấu chân in màu đất hai miền.

          ------------------------------------------------------

          Comment


          • #6
            Originally posted by 10520355 View Post
            Bài này chỉ có 1 điểm đáng lưu ý là -10000 < N < 10000. Nếu không để ý, chỉ dùng công thức N(N+1)/2 thì sẽ bị sai 1 số test. Do đó, cần chia trường hợp:
            N > 0: N(N+1)/ 2
            N <= 0: for(int i = 1; i >= N; i--) sum += i;
            Đề ghi không chính xác "Tính tổng các số từ 1 đến N.". Đáng lẽ phải là "Tính tổng các số nằm giữa 1 và N".

            Em nghĩ anh nên chọn những bài khó hơn 1 chút để topic sôi động hơn.
            mấy bài này mà dùng for là sai bét hết đó em ... bài này "lừa tềnh" thôi. Trường hợp N<0 thì +1 + (- 1) = 0 -> dãy sẽ là -(2 + 3 + ... + N), còn trường hợp dương là (1+2 +3+...+N) ==> tới đây thì code thế nào chắc em biết rồi
            Một khẩu súng giữ hai trời Nam Bắc,
            Một dấu chân in màu đất hai miền.

            ------------------------------------------------------

            Comment


            • #7
              Mong anh nhìn kĩ bài post của em rồi kết luận, đừng trách oan em tội nghiệp
              Bài này là bài http://acm.timus.ru/problem.aspx?space=1&num=1068
              Em accepted bài này trong 0.015s, memory 196KB bằng cách dùng vòng for ở trên như sau:
              Code:
              #include <iostream>
              using namespace std;
              
              int N;
              
              int main()
              {
              	cin >> N;
              	int sum = 0;
              	if(N >= 1) sum = N*(N+1)/2;
              	else for(int i = 1; i >= N; i--) sum += i;
              	cout << sum;
              	return 0;
              }
              University of Information Technology
              Cao Văn Nhàn _ CE10520355
              SĐT: 0188 403 4943

              Email: caovannhan2002@gmail.com

              Comment


              • #8
                Originally posted by 10520355 View Post
                Bài này chỉ có 1 điểm đáng lưu ý là -10000 < N < 10000. Nếu không để ý, chỉ dùng công thức N(N+1)/2 thì sẽ bị sai 1 số test. Do đó, cần chia trường hợp:
                N > 0: N(N+1)/ 2
                N <= 0: for(int i = 1; i >= N; i--) sum += i;
                Đề ghi không chính xác "Tính tổng các số từ 1 đến N.". Đáng lẽ phải là "Tính tổng các số nằm giữa 1 và N".

                Em nghĩ anh nên chọn những bài khó hơn 1 chút để topic sôi động hơn.
                Cứ đi từ từ đã bạn ui ^^, newbie mà hi. dần dần rùi nâng lên. cách làm của bạn đúng rùi, cách làm của mình là ^^

                #include <iostream>using namespace std;
                int main()
                {
                int N,S=0;
                cin >> N;
                if(N>0)
                {
                S=(((1+N) * N)/2);
                cout << S;
                }
                else
                {

                S=(((N+1) * (2-N))/2);
                cout << S;
                }
                return 0;
                }
                Hẹn gặp lại các bạn vào ngày mai, chúc vui vẻ :shy:
                Facebook: Kiều Thắng
                Google Plus: Kiều Thắng
                Thông tin về du học các nước: Du học.

                Comment


                • #9
                  #include<stdio.h>
                  #include<conio.h>
                  void main()
                  {
                  long n,s;
                  printf("Nhap n: ");
                  scanf("%d",&n);
                  if(n>=0)
                  s=n*((n+1)/2);
                  else
                  s=1-(-n*((1-n)/2));
                  printf("\%d",s);
                  getch();
                  }
                  ..............................

                  Comment


                  • #10
                    Originally posted by 09520281 View Post
                    Cứ đi từ từ đã bạn ui ^^, newbie mà hi. dần dần rùi nâng lên. cách làm của bạn đúng rùi, cách làm của mình là ^^



                    Hẹn gặp lại các bạn vào ngày mai, chúc vui vẻ :shy:
                    Theo mình thì: If(n<=0) S=(n-1)*(n-2)/2;

                    Comment

                    LHQC

                    Collapse
                    Working...
                    X