Từ 1 tới 6 trên tổng số 6 kết quả

Đề tài: In số chính phương max, min trong mảng

  1. #1
    Ngày gia nhập
    04 2012
    Nơi ở
    Thái Bình
    Bài viết
    2

    Mặc định In số chính phương max, min trong mảng

    Mình có bài tập này:
    Nhập dãy số nguyên dương. Xét xem trong dãy số có số chính phương không? Nếu có hãy in ra các số chính phương. Từ đó tìm số chính phương lớn nhất, bé nhất.

    Mình mới chỉ nghĩ ra cách xem có phải sô chính phương và in ra, không biết có đúng không:
    #include<stdio.h>
    #include<conio.h>
    #include<math.h>
    main()
    {
    int i,a[100],n;
    double m;
    printf("Nhap so phan tu : ");
    scanf("%d", &n);
    printf("Nhap tung phan tu: ");
    for(i=0;i<n;i++)
    {
    printf("a[%d]", i);
    scanf("%d", &a[i]);
    }
    for(i=0;i<n;i++)
    if(a[i]==(m*m)&&sqrt(a[i])==m)
    printf("%d", a[i]);
    getch();
    }
    Mong moi người giúp đỡ!

  2. #2
    Ngày gia nhập
    02 2012
    Nơi ở
    Xanhpetecbua-Nga
    Bài viết
    34

    câu lệnh này thì máy nó không tính đc đâu em
    if(a[i]==(m*m)&&sqrt(a[i])==m)
    sửa chút:
    C Code:
    1. int m;
    2. //...
    3. for(i=0;i<n;i++)
    4. {
    5. m=sqrt(a[i]);
    6. if(a[i]==(m*m))
    7. printf("%d", a[i]);
    8. }

  3. #3
    Ngày gia nhập
    05 2010
    Bài viết
    29

    Code hơi dài, bác nào có code ngắn hơn cho em học hỏi với ạ.
    C Code:
    1. #include<stdio.h>
    2. #include<conio.h>
    3. #include<math.h>
    4.  
    5. void nhapdayso(int *p, int n)
    6. {
    7.  for(int i=0;i<n;++i)
    8.   {
    9.     printf("a[%d]=",i);
    10.     scanf("%d",p+i);
    11.   }
    12. }
    13.  
    14. int scp(int n)
    15. {
    16.  if(n==int(sqrt(n))*int(sqrt(n))) return 1;
    17.  else return 0;
    18. }
    19.  
    20. main()
    21. {
    22.  int a[100],s[100],n,i,j=-1,max,min;
    23.  printf("Nhap so phan tu cua day: ");
    24.  scanf("%d",&n);
    25.  nhapdayso(a,n);
    26.  printf("Cac so chinh phuong trong day: ");
    27.  for(i=0;i<n;++i)
    28.   {
    29.     if(scp(a[i])==1)
    30.      {
    31.       printf("%3d",a[i]);
    32.       s[++j]=a[i];
    33.      }
    34.   }
    35.  if(j==-1) printf("Khong co");
    36.  else
    37.   {
    38.     min=max=s[0];
    39.     for(i=0;i<=j;++i)
    40.      {
    41.       if(s[i]>max) max=s[i];
    42.       if(s[i]<min) min=s[i];
    43.      }
    44.     printf("\n");
    45.     printf("Max la: %d \n",max);
    46.     printf("Min la: %d \n",min);
    47.   }
    48.  getch();
    49. }

  4. #4
    Ngày gia nhập
    04 2010
    Bài viết
    1,534

    Nếu dãy có nhiều số chính phương lặp lại thì sao? Ta không thể in ra một kết quả như vầy:

    16, 9, 16, 25, 25, 16

    Giải thuật:

    1. Nếu giải theo cách dùng mảng để chứa các số chính phương như trên thì nên sắp xếp mảng số cp. Lúc đó số max, min tự động có luôn.

    2. Sắp xếp dãy trước khi bắt đầu làm việc.
    Lúc đó số chính phương tìm ra đầu tiên là min và sô chính phương tìm ra cuối cùng là max.

    3. Dùng mảng để chứa các số chính phương đã in ra rồi. Duyệt mảng mỗi khi cần tìm một số chính phương mới.

  5. #5
    Ngày gia nhập
    05 2010
    Bài viết
    29

    Em đã nhận ra chỗ sai, cám ơn bác VoTichSu.

    Code em sửa lại, nhờ mọi người tiếp tục góp ý:
    C Code:
    1. #include<stdio.h>
    2. #include<conio.h>
    3. #include<math.h>
    4.  
    5. void nhapdayso(int *p, int n)
    6. {
    7.  for(int i=0;i<n;++i)
    8.   {
    9.     printf("a[%d]=",i);
    10.     scanf("%d",p+i);
    11.   }
    12. }
    13.  
    14. void sapxeptang(int *p, int n)
    15. {
    16.  int i,j,tam;
    17.  for(i=0;i<n-1;++i)
    18.   for(j=i+1;j<n;++j)
    19.     {
    20.      if(p[j]<p[i])
    21.       {
    22.         tam=p[i];
    23.         p[i]=p[j];
    24.         p[j]=tam;
    25.       }
    26.     }
    27. }
    28.  
    29. int scp(int n)
    30. {
    31.  if(n==int(sqrt(n))*int(sqrt(n))) return 1;
    32.  else return 0;
    33. }
    34.  
    35. main()
    36. {
    37.  int a[100],s[100],n,i,j=-1;
    38.  printf("Nhap so phan tu cua day: ");
    39.  scanf("%d",&n);
    40.  nhapdayso(a,n);
    41.  for(i=0;i<n;++i)
    42.   {
    43.     if(scp(a[i])==1) s[++j]=a[i];
    44.   }
    45.  if(j==-1) printf("Khong co so chinh phuong");
    46.  else
    47.   {
    48.     printf("Cac so chinh phuong: ");
    49.     sapxeptang(s,j+1);
    50.     for(i=0;i<=j;++i)
    51.      {
    52.       if(s[i]!=s[i+1]) printf("%3d",s[i]);
    53.      }
    54.     printf("\n");
    55.     printf("Min la: %d \n",s[0]);
    56.     printf("Max la: %d",s[j]);
    57.   }
    58.  getch();
    59. }

  6. #6
    Ngày gia nhập
    10 2010
    Bài viết
    177

    Mặc định In số chính phương max, min trong mảng

    1. Kiểm tra số chính phương
    2. Tìm ra số chính phương xuất hiện đầu tiên trong mảng
    3. Đặt lính canh là cái số chính phương tìm được trong mảng
    4. Duyệt mảng và kiểm tra số chính phương của phần tử thứ i + So sánh với lính canh => Tìm ra Max và Min
    5. Xuất kết quả

    C++ Code:
    1. // Array.cpp : Defines the entry point for the console application.
    2. //
    3.  
    4. #include "stdafx.h"
    5.  
    6. // Kiem tra so chinh phuong
    7. int CheckNumSquare(int n)
    8. {
    9.     for(int i = 0; i <= n; i++)
    10.         if(i * i == n)
    11.             return 1;
    12.     return 0;
    13. }
    14.  
    15. // Nhap mang so nguyen
    16. void InputArray(int *a, int n)
    17. {
    18.     for(int i = 0; i < n; i++)
    19.     {
    20.         printf("Input value of a[%d]: ", i);
    21.         scanf("%d", &a[i]);
    22.     }
    23. }
    24.  
    25. // Xuat mang so nguyen
    26. void OutputArray(int *a, int n)
    27. {
    28.     printf("\n\n");
    29.     printf("Values of array: ");
    30.     for(int i = 0; i < n; i++)
    31.     {
    32.         printf("%d ", a[i]);
    33.     }
    34.     printf("\n");
    35. }
    36.  
    37. // Tim ra so chinh phuong dau tien trong mang
    38. int FirstNumSquare(int *a, int n)
    39. {
    40.     for(int i = 0; i < n; i++)
    41.     {
    42.         if(CheckNumSquare(*(a + i)) == 1)
    43.             return *(a + i);
    44.     }
    45.     return -1;
    46. }
    47.  
    48. // Liet ke tat ca cac so chinh phuong trong mang
    49. void PrintNumSquare(int *a, int n)
    50. {
    51.     printf("List NumSquare: ");
    52.     for(int i = 0; i < n; i++)
    53.         if(CheckNumSquare(*(a + i)) == 1)
    54.             printf("%d ", *(a+i));
    55.     printf("\n\n");
    56. }
    57.  
    58. // Tim ra so chinh phuong MAX trong mang
    59. int MaxNumSquare(int *a, int n)
    60. {
    61.     int lc = FirstNumSquare(a, n);
    62.     for(int i = 0; i < n; i++)
    63.         if(CheckNumSquare(*(a + i)) == 1 && *(a + i) > lc)
    64.             lc = *(a + i);
    65.     return lc;
    66. }
    67.  
    68. // Tim ra so chinh phuong MIN trong mang
    69. int MinNumSquare(int *a, int n)
    70. {
    71.     int lc = FirstNumSquare(a, n);
    72.     for(int i = 0; i < n; i++)
    73.         if(CheckNumSquare(*(a + i)) == 1 && *(a + i) < lc)
    74.             lc = *(a + i);
    75.     return lc;
    76. }
    77.  
    78.  
    79. int _tmain(int argc, _TCHAR* argv[])
    80. {
    81.     int n;
    82.     printf("Input the number array: ");
    83.     scanf("%d", &n);
    84.  
    85.     // Cap phat dong cho mang so nguyen a
    86.     int *a = new int[n];
    87.  
    88.     InputArray(a, n); // Goi ham nhap mang
    89.     OutputArray(a, n); // Goi ham xuat mang
    90.    
    91.     PrintNumSquare(a, n); // In cac so chinh phuong
    92.  
    93.     int maxSquare = MaxNumSquare(a, n);
    94.     printf("Max NumSquare: %d\n", maxSquare); // Xuat ra so chinh phuong max
    95.     int minSquare = MinNumSquare(a, n);
    96.     printf("Min NumSquare: %d\n", minSquare);// Xuat ra so chinh phuong min
    97.  
    98.     delete []a;
    99.     return 0;
    100. }
    Đã được chỉnh sửa lần cuối bởi nndung179 : 28-04-2012 lúc 04:13 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