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

Đề tài: Tạo mảng số nguyên ngẫu nhiên với các phần tử ko trùng nhau

  1. #1
    Ngày gia nhập
    06 2011
    Bài viết
    5

    Question Tạo mảng số nguyên ngẫu nhiên với các phần tử ko trùng nhau

    Đề: tạo mảng số nguyên ngẫu nhiên từ 0 đến 127 (các phần tử không trùng nhau):
    Code mình viết, khi nhập 100 phần tử lúc nào cũng có 2 phần tử trùng nhau :(
    Mình ko tìm dc chỗ sai, ai có thể giúp mình với:
    Code:
    #include "stdafx.h"
    #include <iostream>
    #include <ctime> //hàm time
    
    using namespace std;
    
    int _tmain(int argc, _TCHAR* argv[])
    {
    	srand(time(0)); //mỗi lần chạy sẽ cho dãy số khác nhau theo time(0)
    	int n;
    	cout <<"Nhap so phan tu n: ";
    	cin >>n;
    	int *a = new int[n]; // cấp phát động n phần tử cho mảng a
    	for(int i=0; i<n; i++) //Tự động nhập mảng
    	{
    		a[i] = rand()% 128;
    		for(int j =i-1; j>=0; j--) //kiểm tra phần tử a[i] đã có trong mảng hay ko
    		{
    			if(a[i] != a[j])
    				continue;
    			else					//nếu trùng thì gán lại a[i]
    			{
    				a[i] = rand()% 128;
    				j++;
    			}
    		}
    	}
    	cout <<"\nMang cac so ngau nhien tu 0 den 127: \n";
    	for (int i =0; i<n;i++) //Xuất mảng
    		cout << a[i] <<"\t";
    	system("pause");
    	return 0;
    }
    Ko tìm dc chỗ sai

  2. #2
    Ngày gia nhập
    03 2010
    Nơi ở
    My Home
    Bài viết
    772

    Sai ở chỗ kiếm tra thấy trùng giá trị trước đó đã tạo ngay ra một giá trị a[i] trong vòng lặp của j.
    a[i] phải được tạo trước vòng lặp j. Nếu trùng thì chưa tăng biến i lên mà làm lại đến khi nào nó thực sự khác với các giá trị đã tồn tại trước đó.


    C Code:
    1. #include <stdio.h>
    2. #include <stdlib.h>
    3. #include <time.h>
    4. #include <assert.h>
    5. #include <malloc.h>
    6. #include <memory.h>
    7.  
    8. #ifdef _MSC_VER         //Neu su dung Visual C
    9. #include <conio.h>
    10. #endif
    11.  
    12. int random_uint(unsigned int max)
    13. {
    14.     assert(max);
    15.     return rand() % max;
    16. }
    17. void random_unique_array(unsigned int* arr, int size, unsigned int max)
    18. {
    19.     int i = 0;
    20.  
    21.     assert(arr);
    22.     for(;i < size;)
    23.     {
    24.         char found = 0;
    25.         int j;
    26.         arr[i] = random_uint(max);
    27.         if(i)
    28.         {
    29.             for(j = 0; j < i; j++)
    30.             {
    31.                 if(arr[j] == arr[i])
    32.                 {
    33.                     found = 1;
    34.                     break;
    35.                 }
    36.             }
    37.         }
    38.         if(!found)
    39.             ++i;
    40.     }
    41. }
    42. int main(int argc, char* argv[])
    43. {
    44.     int  size = 100;
    45.     unsigned int* arr;
    46.     int  i = 0;
    47.  
    48.     arr = (unsigned int *)malloc(size * sizeof(int));
    49.     memset(arr, 0, size * sizeof(int));
    50.     srand(time(0));
    51.     random_unique_array(arr, size, 128);
    52.     for(i = 0; i < size; i++)
    53.         printf("%4d", arr[i]);
    54.     free(arr);
    55. #if defined(_MSC_VER)   //Neu su dung Visual C
    56.     getch();
    57. #endif
    58.     return 0;
    59. }

  3. #3
    Ngày gia nhập
    06 2011
    Bài viết
    5

    Ko biết bạn nói đúng sai vì tui dg hỏi giải thuật của tui

    Bạn tui sửa lại cho tui rồi, sai chỗ này


    Code:
    else					//nếu trùng thì gán lại a[i]
    			{
    				a[i] = rand()% 128;
    				j=i;
    			}
    vậy là xg

  4. #4
    Ngày gia nhập
    03 2010
    Nơi ở
    My Home
    Bài viết
    772

    Trích dẫn Nguyên bản được gửi bởi jetmoon Xem bài viết
    Ko biết bạn nói đúng sai vì tui dg hỏi giải thuật của tui
    Tớ nói sai đấy

  5. #5
    Ngày gia nhập
    09 2010
    Nơi ở
    Hà Nội
    Bài viết
    381

    skype: hvphu2010
    Yahoo: hvphu2010
    Sdt: 0129 609 4567

  6. #6
    Ngày gia nhập
    01 2011
    Nơi ở
    -Mountain-
    Bài viết
    768

    Mặc định Tạo mảng số nguyên ngẫu nhiên với các phần tử ko trùng nhau

    mod kiti xì pàm à. Link dẫn đến vị trí hiện tại của bài viết
    Hướng dẫn C++: https://www.youtube.com/watch?v=BwLodoQdoY4&list=PL1c9Uxlo-mplJDRGdONNupgo5OCBTyGGn

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

  1. Cách ghép đôi ngẫu nhiên 2 phần tử thuộc 2 mảng khác nhau?
    Gửi bởi DuongVT trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 4
    Bài viết cuối: 17-05-2012, 10:51 PM
  2. Lập trình C++ Cách sử dụng hàm random để tạo số ngẫu nhiên không trùng nhau?
    Gửi bởi reach_phan 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: 10-11-2011, 09:53 PM
  3. Phân tích số tự nhiên thành tích các số nguyên tố
    Gửi bởi caphetim trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 4
    Bài viết cuối: 25-09-2011, 06:48 PM
  4. Tạo số ngẫu nhiên không trùng nhau lưu vào mảng?
    Gửi bởi icde trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 2
    Bài viết cuối: 20-09-2009, 09:55 PM
  5. [ Solved ]Tạo số ngẫu nhiên không trùng nhau
    Gửi bởi jacking_nguyen1 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 31
    Bài viết cuối: 23-09-2008, 06:41 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