Trang 1 trên tổng số 2 12 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 13 kết quả

Đề tài: [C] Mảng 1 chiều!

  1. #1
    Ngày gia nhập
    11 2006
    Bài viết
    8

    Mặc định [C] Mảng 1 chiều!

    Mình có một bài tập về mảng một chiều xin mọi người giúp đỡ!
    Nhập một dãy số nguyên dương x1, x2, ..., xn (n<500), hãy tìm tất cả các phần tử xi của dãy số trên thỏa mãn điều kiện xi là tổng của hai số nguyên tố khác nhau.( Ví dụ 10 là tổng của hai số nguyên tố 3 và 7, còn 11 thì không là tổng của hai số nguyên tố khác nhau nào cả).
    Xin cảm ơn mọi người!

  2. #2
    No Avatar
    nch_87825 Khách

    Mình nghĩ bài này lập 1 hàm kiểm tra 1 số có pải là 1 số nguyên tố ko.
    Rồi xét các số trong mảng x[]
    với mỗi 1 số dùng các biến chạy từ 1 đến x[i]. Rồi đặt các điều kiện : là số nguyên tố, 2 số khác nhau, và tổng pải là x[i].
    Nếu thỏa mãn thì in ra x[i]

  3. #3
    Ngày gia nhập
    01 2007
    Bài viết
    412

    Trích dẫn Nguyên bản được gửi bởi nch_87825 Xem bài viết
    Mình nghĩ bài này lập 1 hàm kiểm tra 1 số có pải là 1 số nguyên tố ko.
    Rồi xét các số trong mảng x[]
    với mỗi 1 số dùng các biến chạy từ 1 đến x[i]. Rồi đặt các điều kiện : là số nguyên tố, 2 số khác nhau, và tổng pải là x[i].
    Nếu thỏa mãn thì in ra x[i]
    Mình đã thử cách này, không khả thi bạn ạ
    Này nhé, mảng x như thế này: 3 5 6 8 10 11
    x[0]=3: tổng các số nguyên tố trước 3 là 2 (2 là số nguyên tố). Không phải!
    x[1]=5: tổng các số nguyên tố trước nó bằng 5 (2+3). Thỏa rồi!
    x[2]=6 //... không phải
    x[3]=8: tổng các số nguyên tố trước nó bằng 2+3+5+7=17. Chương trình sẽ nghĩ là không thể phân tích 8 thành tổng các số nguyên tố được. Nhưng thực tế thì 8= 3+5 (thỏa)

  4. #4
    Ngày gia nhập
    10 2006
    Nơi ở
    In Your Bugs
    Bài viết
    823

    Ủa hôm trước có viết câu hỏi hông bit vì sao vào lại hông thấy lạ thiệt giờ chẳng lẽ hỏi lại


    Nhập một dãy số nguyên dương x1, x2, ..., xn (n<500), hãy tìm tất cả các phần tử xi của dãy số trên thỏa mãn điều kiện xi là tổng của hai số nguyên tố khác nhau.( Ví dụ 10 là tổng của hai số nguyên tố 3 và 7, còn 11 thì không là tổng của hai số nguyên tố khác nhau nào cả
    Bi giờ cho hỏi là 3 và 7 là số có sẵn trong mảng hay chỉ là số mà do chúng ta tự phân tích tìm kiếm lấy !

    ÔI viết lại chán quá , trả lời gấp ok ?

  5. #5
    Ngày gia nhập
    01 2007
    Bài viết
    412

    Trích dẫn Nguyên bản được gửi bởi kidkid Xem bài viết
    Ủa hôm trước có viết câu hỏi hông bit vì sao vào lại hông thấy lạ thiệt giờ chẳng lẽ hỏi lại




    Bi giờ cho hỏi là 3 và 7 là số có sẵn trong mảng hay chỉ là số mà do chúng ta tự phân tích tìm kiếm lấy !

    ÔI viết lại chán quá , trả lời gấp ok ?
    Dạ, thưa mr kid, đại ý câu hỏi là như thế này này: Nhập vào 1 mảng các số nguyên, sau đó xét xem các phần tử trong mảng có phải được phân tích từ tổng của các số nguyên tố hay không?
    Ví dụ nhé: nhập mảng như sau: 5 8 10 11 15
    5=2+3 ==>5 là tổng của các số nguyên tố
    10 = 3+7 ==> 10 là tổng của các số nguyên tố
    8 = 5+3 ==> thỏa!
    15= 3+5+7 ==> thỏa!
    11 thì không thể phân tích được rồi.
    ==> các số nguyên tố này phải tự tìm lấy chứ

  6. #6
    No Avatar
    nch_87825 Khách

    Mặc định [C] Mảng 1 chiều!

    Mình đã thử cách này, không khả thi bạn ạ
    Này nhé, mảng x như thế này: 3 5 6 8 10 11
    x[0]=3: tổng các số nguyên tố trước 3 là 2 (2 là số nguyên tố). Không phải!
    x[1]=5: tổng các số nguyên tố trước nó bằng 5 (2+3). Thỏa rồi!
    x[2]=6 //... không phải
    x[3]=8: tổng các số nguyên tố trước nó bằng 2+3+5+7=17. Chương trình sẽ nghĩ là không thể phân tích 8 thành tổng các số nguyên tố được. Nhưng thực tế thì 8= 3+5 (thỏa)
    Có lẽ trong bài này bạn hiểu lầm ý của mình rồi.
    Chương trình mình nói tới sẽ ko cộng tất các các số nguyên tố trong khoảng tử 1 đến x[i] lại.
    Ý mình là với mỗi một số x[i] thì ta dùng các biến chạy cụ thể ở đây là 2 biến ( bởi vì đề bài ra là số có thể viết đc dưới dạng tổng 2 số nguyên tố) i,j đều chạy từ 1 đến x[i] rồi kiểm tra các điều kiện mình nêu. Nếu đông thời thỏa mãn tất cả mấy điều kiện đó thì sẽ in ra x[i].
    Cách này theo mình nghĩ là cách đơn giản nhất. Tuy nhiên nó sẽ ko pải là cách tối ưu nhất bởi vì nó sẽ tốn nhiều time khi chạy. Chắc chắn sẽ có cách khác tối ưu hơn nhưng mình chưa nghĩ tới

  7. #7
    Ngày gia nhập
    11 2006
    Bài viết
    8

    Trích dẫn Nguyên bản được gửi bởi kidkid Xem bài viết
    Ủa hôm trước có viết câu hỏi hông bit vì sao vào lại hông thấy lạ thiệt giờ chẳng lẽ hỏi lại




    Bi giờ cho hỏi là 3 và 7 là số có sẵn trong mảng hay chỉ là số mà do chúng ta tự phân tích tìm kiếm lấy !

    ÔI viết lại chán quá , trả lời gấp ok ?
    Không như bạn nghĩ đâu, mà hai số 3 và 7 là hai số nguyên tố bất kỳ, mà x[i] chỉ cần phân tích thành tổng của hai số nguyên tố bất kỳ thôi, chỉ hai số mà thôi không phải là 3,4,hay n số nguyên tố bất kỳ đâu:
    Ví dụ: 5=2+3: 5 là tổng của hai số nguyên tố 2 và 3
    7=2+5: 7 là tổng của hai số nguyên tố 2 và 5
    10=3+7: 10 là tổng của hai số nguyên tố 3 và 7
    còn 15 = 3 +5 +7 không thỏa mãn vì nó lag tổng của 3 số nguyên tố khác nhau mất rồi, mà đầu bài chỉ cho phép phân tích thành tổng của 2(và chỉ 2) số nguyên tố khác nhau thôi nhé!
    các bạn đã hiểu ý mình chưa?

  8. #8
    Ngày gia nhập
    08 2006
    Bài viết
    19

    Trích dẫn Nguyên bản được gửi bởi nch_87825 Xem bài viết
    Mình nghĩ bài này lập 1 hàm kiểm tra 1 số có pải là 1 số nguyên tố ko.
    Rồi xét các số trong mảng x[]
    với mỗi 1 số dùng các biến chạy từ 1 đến x[i]. Rồi đặt các điều kiện : là số nguyên tố, 2 số khác nhau, và tổng pải là x[i].
    Nếu thỏa mãn thì in ra x[i]
    nếu chỉ dừng lại như cậu sẽ tốn rất nhiều thời gian. có thể đưa ra ngay 1 số cách để rút ngắn thời gian chạy:
    ktra x[i] là số lẻ thì x[i]-2 phải là số nguyên tố. nếu không loại
    nếu x[i] là số chẵn:
    for (j=3; j<=ceil((float)x[i]/2); j+=2)
    if (j và x[i]-j là số nguyên tố) ok rồi
    Đã được chỉnh sửa lần cuối bởi melaptrinh : 18-03-2007 lúc 10:22 PM.

  9. #9
    No Avatar
    nch_87825 Khách

    ktra x[i] là số lẻ thì x[i]-2 phải là số nguyên tố. nếu không loại
    mình chưa thật sự hiểu ý của bạn lắm. VD x[i] =11 là số lẻ; x[i]-2=9 đâu pải số nguyên tố.
    Tât nhiên sẽ có cách để rút ngắn thời gian chạy.
    Đơn giản như mình có thể rút ngắn số vòng lặp
    cho i chạy từ 1->n
    cho j chạy từ i+1->n
    như vậy đồng thời cũng rút bớt đc 1 điều kiện: 2 số khác nhau, khi kiểm tra.

  10. #10
    Ngày gia nhập
    08 2006
    Bài viết
    19

    tiện vừa gõ xong, đem cho bà con mổ xẻ
    Code:
    #include<stdio.h>
    #include<conio.h>
    #include<math.h>
    char ngto(int);
    void main()
    {
     int a[500]={0};
     int n,i,j;
     clrscr();
     printf("nhap n: ");
     scanf("%d",&n);
     printf("nhap cac phan tu cua day:\n");
     for (i=0;i<n;i++)
    	 {
    	  printf("a[%d]= ",i+1);
    	  scanf("%d",&a[i]);
    	 }
     printf("cac so thoa man la:\n");
     for (i=0; i<n; i++)
    	 {
    	  if ((a[i]%2)!=0)
    		 {
    		  if (ngto(a[i]-2))printf("%d= %d +%d\n",a[i],2,a[i]-2);
    		 }
    	  else
    			{
    			 for (j=3; j<=ceil(float(a[i])/2); j+=2)
    				 if (ngto(j) && ngto(a[i]-j)&&(j!=a[i]-j))
    					{
    					 printf("%d= %d+ %d\n",a[i],j,a[i]-j);
    					 break;
    					}
    			}
    	 }
     getch();
    }
    char ngto(int x)
    {
     int i;
     if (x<=1) return 0;
     if (x==2) return 1;
     if ((x%2)==0) return 0;
     for (i=3; i<=ceil(sqrt(x)); i+=2)
    	 if ((x%i)==0) return 0;
     return 1;
    }

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

  1. Trả lời: 2
    Bài viết cuối: 21-04-2013, 09:46 AM
  2. Lỗi: bố cục trang web tự tăng theo chiều ngang khi chiều cao thay đổi
    Gửi bởi tuanngocpt trong diễn đàn Nhập môn lập trình C#, ASP.NET
    Trả lời: 2
    Bài viết cuối: 16-03-2013, 11:25 PM
  3. Trả lời: 1
    Bài viết cuối: 28-04-2012, 09:43 PM
  4. Cách truyền mang 1 chiều cho hàm bài con trỏ và mảng một chiều ai có thể giải thích giúp mình
    Gửi bởi biencute trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 8
    Bài viết cuối: 21-03-2012, 09:00 AM
  5. Lời giải bài tập: Chuỗi Ký tự, mảng số nguyên 1 chiều, mảng 2 chiều, tạo Menu
    Gửi bởi xuanngoc trong diễn đàn Thủ thuật, Tutorials và Mã nguồn C/C++/C++0x
    Trả lời: 0
    Bài viết cuối: 15-10-2011, 01:17 AM

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