Trang 1 trên tổng số 3 123 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 26 kết quả

Đề tài: Bài tập C | Tính tổng các phần tử trong mảng lớn hơn và nhỏ hơn một số?

  1. #1
    Ngày gia nhập
    03 2009
    Bài viết
    14

    Mặc định Bài tập C | Tính tổng các phần tử trong mảng lớn hơn và nhỏ hơn một số?

    giúp em giải quyết bài này nhé :
    Viết chương trình tính tổng các phần tử trong mảng lớn hơn số M và tổng các phần tử trong mảng nhỏ hơn M sao cho 2 tổng này xấp xỉ nhau(gần bằng nhau).

  2. #2
    Ngày gia nhập
    11 2008
    Bài viết
    203

    Hoàn toàn không hiểu yêu cầu của bạn. Vui lòng cho tớ 1 ví dụ, tớ sẽ giúp bạn.
    Tôi tin rằng: giải thuật thì có thể tìm trong hàng trăm GB ebook, hoặc Google nhưng code chạy thì chưa chắc! Hãy post code để chứng tỏ giải thuật của bạn là đúng!
    Giải thuật là bản thiết kế của ngôi nhà, code là phần xây dựng. Nếu chỉ xây nhà trên giấy thì ta sống chả khác nào người nguyên thủy.

  3. #3
    Ngày gia nhập
    03 2009
    Bài viết
    14

    Vd như mình nhập mảng gồm 11 phần tử :
    6 7 6 13 8 9 10 3 5 4 4
    số cần so sánh la 7
    xuất ra
    tổng các phần tử lớn hơn 7 là 27
    tổng các phần tử nhỏ hơn 7 la 28

  4. #4
    Ngày gia nhập
    03 2009
    Bài viết
    14

    C Code:
    1. #include <stdio.h>
    2. #include <conio.h>
    3. main()
    4. {
    5. clrscr();
    6. int a[30],tam,i,j,n,m,dem,dem1,dem2,d1=0,d2=0,s1,s2;
    7. printf("nhap so phan tu cua mang ");scanf("%d",&n);
    8. printf("nhap so de so sanh ");scanf("%d",&m);
    9. for(i=0;i<n;i++)
    10. {
    11. printf("a[%d]",i);
    12. scanf("%d",&a[i]);
    13. if(a[i] > m) d1++;
    14. if(a[i] < m) d2++;
    15. }
    16. printf("\n");
    17. for(i=0;i<n;i++) printf("%d ",a[i]);
    18. printf("\n");
    19. for(i=0;i<n-1;i++)
    20. for(j=i+1;j<n;j++)
    21. if(a[i]<a[j])
    22.  {
    23.   tam=a[i];
    24.   a[i]=a[j];
    25.   a[j]=tam;
    26.  }
    27. for(i=0;i<n;i++) printf("%d",a[i]);
    28. printf("\n");
    29. i=0;j=n-1;s1=a[i];s2=a[j];dem1=1;dem2=1;
    30. while(dem!=n)
    31. {
    32. if(s1<s2)
    33.  { i++;
    34.    s1+=a[i];
    35.    dem1++;
    36.    if(dem1==d1) break;
    37.  }
    38.  else
    39.   { j--;
    40.     s2+=a[j];
    41.     dem2++;
    42.     if(dem2==d2) break;
    43.   }
    44.  dem=dem1+dem2;
    45. }
    46. printf("tong tu trai sang = %d",s1);
    47. printf("\ntong tu phai sang = %d",s2);
    48. getch();
    49. }
    mình cũng đã thử nghĩ code như trên nhưng xuất ra
    tổng các phần tử lớn hơn 7 là 23
    tổng các phần tử nhỏ hơn 7 là 28
    Đã được chỉnh sửa lần cuối bởi lethanh : 18-04-2009 lúc 11:13 PM.

  5. #5
    Ngày gia nhập
    03 2009
    Nơi ở
    Ở địa ngục
    Bài viết
    667

    Xin lỗi bạn, ý love hỏi là bạn cần tính tổng toàn bộ các số lớn hơn và nhỏ hơn số so sánh?

    Hay là 2 tổng đó không phải là toàn bộ mà chỉ cần 2 tổng đó gần nhau nhất?

  6. #6
    Ngày gia nhập
    03 2009
    Bài viết
    14

    Mặc định Bài tập C | Tính tổng các phần tử trong mảng lớn hơn và nhỏ hơn một số?

    2 tổng đó gần nhau nhất

  7. #7
    Ngày gia nhập
    09 2006
    Nơi ở
    /usr/share/.hack@
    Bài viết
    1,433

    Giải trí tí

    C++ Code:
    1. /*
    2.  * @author xcross87
    3.  * @date 19-Apr-2009
    4.  * @file sum.c
    5.  * @note
    6.  */
    7.  
    8. /* prototype */
    9. #include <stdio.h>
    10. #include <stdlib.h>
    11.  
    12. /* macro */
    13. #define SWAP(a,b) a^=b^=a^=b;
    14.  
    15. #define MAX_ELEMENT 100
    16.  
    17. #define TOTAL 0
    18. #define MAX   1
    19. #define MIN   2
    20.  
    21. /* entry point */
    22. int main(void)
    23. {
    24.     // var declare
    25.     int input[MAX_ELEMENT];
    26.     int inTotal, cnt = 0;
    27.     int sum[3] = {0, 0, 0};
    28.  
    29.     // max element input
    30.     printf("How many elements 'ya want? : ");
    31.     scanf("%d%*c",&inTotal);
    32.  
    33.     // exit if out of range
    34.     if(inTotal > 100) {
    35.         printf("Yo man! Max allowed elements are 100 only...Exit!\n");
    36.         exit(-1);
    37.     }
    38.  
    39.     // get input
    40.     for(; cnt < inTotal; ++cnt) {
    41.         printf("input: element %d = ", cnt + 1);
    42.         scanf("%d%*c", &input[cnt]);
    43.         // get total sum
    44.         sum[TOTAL] += input[cnt];
    45.     }
    46.  
    47.     // get avg closest value
    48.     for(cnt = 0; cnt < inTotal; ++cnt) {
    49.         if(input[cnt] <= sum[TOTAL]/inTotal)
    50.             // get a first sum
    51.             sum[MAX] += input[cnt];
    52.     }
    53.     // calculate the other sum
    54.     sum[MIN] = sum[TOTAL] - sum[MAX];
    55.  
    56.     // check for correct max/min sums
    57.     if(sum[MAX] < sum[MIN])
    58.         SWAP(sum[MAX], sum[MIN]);
    59.  
    60.     // output result
    61.     printf("Upper Sum: %d \n", sum[MAX]);
    62.     printf("Lower Sum: %d \n", sum[MIN]);
    63.  
    64.     // return on success
    65.     return 0;
    66. }
    None!

  8. #8
    Ngày gia nhập
    03 2009
    Bài viết
    14

    trong trường hợp bài của em còn so sánh với 1 số M nữa còn code mà bác xcross87 ko có phần so sánh với số M , khi chạy code của bác cho vd của em nó ra kết quả là
    upper sum 47
    lower sum 28

  9. #9
    Ngày gia nhập
    11 2008
    Bài viết
    203

    Bạn cho tôi biết kết quả của dãy sau:
    1 2 3 4 5 7 9 11 13 15
    M=5
    Thì kết quả là câu nào?
    a) 6 VS 7...................... //1+2+3= 6 VS 7
    b) 10 VS 9 .................. //1+2+3+4=10 VS 9
    c) 10 VS 11................. //1+2+3+4=10 VS 11

    Thật sự, không hiểu rõ đề bài của bạn.
    Tôi tin rằng: giải thuật thì có thể tìm trong hàng trăm GB ebook, hoặc Google nhưng code chạy thì chưa chắc! Hãy post code để chứng tỏ giải thuật của bạn là đúng!
    Giải thuật là bản thiết kế của ngôi nhà, code là phần xây dựng. Nếu chỉ xây nhà trên giấy thì ta sống chả khác nào người nguyên thủy.

  10. #10
    Ngày gia nhập
    03 2009
    Nơi ở
    Ở địa ngục
    Bài viết
    667

    Mình nghĩ là bạn sai chổ này:
    Hỏi Bạn 1 chút: Số 27 của bạn có phải lấy 10+8+9 không?
    Sao bạn lại lấy 13+10 vậy?
    Sau khi sửa code của bạn, mình cũng chạy ra kết quả giống của Xcross87 vậy.
    Cụ thể mình sửa cho dem1 và dem2 chạy từ 0.
    còn tất cả đều giống của bạn.
    Nhưng có lúc mình thêm điều kiện s1>s2 lúc không.(không nhớ được lúc nào cho kết quả giống Xcross87 nửa)

    Vừa mới chạy tay xong code của bạn. đúng là nó sẽ xuất ra số 23 và 27.
    Bạn thử chạy tay xem.

    Mình nghĩ bài này khá phức tạp:
    Đầu tiên tính tổng các tổ hợp số nhỏ hơn số so sánh (sss) (có 2^d1 tổ hợp)
    Tính tổng các tổ hợp số lớn hơn sss (có 2^d2 tổ hợp)
    Tính trị tuyệt đối hiệu tất cả các cặp tổng tổ hợp. Tìm trị tuyệt đối nhỏ nhất.

    Không biết mọi người có cách hay hơn không?
    Mình hiểu rồi love ơi. VD của bạn thì bằng nhau là gần nhất đó là 3, 4 VS 7.
    Đã được chỉnh sửa lần cuối bởi trungkien45 : 19-04-2009 lúc 08:24 PM.

Các đề tài tương tự

  1. Lập trình C tìm xem trong mảng số nguyên i_Mang[] có bao nhiêu phần tử có giá trị âm & phần tử có giá trị âm trong mảngn
    Gửi bởi fawker trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 2
    Bài viết cuối: 29-05-2013, 03:28 PM
  2. Bài tập C xóa phần tử trùng nhau trong mảng 1 chiều để lại 1 phần tử
    Gửi bởi ronoa trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 2
    Bài viết cuối: 06-01-2012, 10:46 PM
  3. Thủ tục loại bỏ các phần tử trùng nhau, giữ lại duy nhất 1 phần tử trong DSLK
    Gửi bởi mrtyoffline trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 2
    Bài viết cuối: 02-03-2011, 10:27 PM
  4. Thuật toán trên C | Xóa phần tử trong dãy phần tử tăng dần?
    Gửi bởi quangphuit trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 3
    Bài viết cuối: 09-03-2010, 01:57 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn