30/09/2018, 21:08
Hỗ trợ e bài mảng :(
đề e tóm tắt lại là nhập n số phần tử . Nếu 2 số đó trùng nau thì sẽ tăng thêm 1 đơn vị . In ra số lớn nhất
VD intput n =3
2 2 3
out => 4
nghĩa là 2 số cấp 2 trùng nhau tạo số 3 .Và số 3 đó lại tiếp tục trùng với số trong mảng nữa là 3 3 =4
VD2 3
1 2 3
out 3
Và đây là code của e sao nó chỉ chạy 1 lần là nó kiểm tra 1 lần rồi nó in ra xuất ko đúng ý e . Code này e chạy thử trùng nhau mà nó chỉ chạy 1 lần
#include<iostream>
using namespace std;
int main()
{
int a[1000],n;
cin>>n;
for(int i=0;i<n;i++)
{
cin>>a[i];
}
for(int i=0;i<n;i++)
{
for(int j=i+1;j<n;j++)
{
if(a[i]==a[j])
{
for(int k=j;k<n;k++)
{
a[k]=a[k+1];
}
n--;
a[i]++;
}
}
}
for(int i=0;i<n;i++)
{
cout<<a[i]<<" ";
}
}
Bài liên quan
Mình chưa hiểu cách mô tả của bạn lắm.
Cho mình hỏi với test 2 1 2 2 thì kết quả ra bao nhiêu?
Bạn để ý code của bạn nhé:
Ví dụ với test: 2 2 3
Chương trình của bạn đang chạy như thế này:
Test thử 2 1 1 3
2 cái trùng nhau thì nâng lên 1 bậc bài test của bạn sẽ ra 3 1 2
à @@ , tks bạn nha , h tui ms hiểu . tui làm ra rùi hihi ^^ :3
à bạn ơi coi khi test 3 3 3 3 5 sao nó ra là 5 mà ko phải 6 z
#include
using namespace std;
int main()
{
int a[1000],n;
cin>>n;
for(int i=0;i<n;i++)
{
cin>>a[i];
}
int max=a[0];
for(int i=0;i<n;i++)
{
for(int j=i+1;j<n;j++)
{
if(a[i]==a[j])
{
/for(int k=j;k<n;k++)
{
a[k]=a[k+1];
}
n–
a[i]++;/
a[i]++;
}
}
if(a[i]>max)
{
max=a[i];
}
}
}
Mình thực sự k nhìn đc code của bạn với format như vậy.
Bạn nên làm 1 vòng while ở ngoài cùng. Khi không thể tìm thấy sự trùng lặp nữa thì in ra kết quả nhé.
mình vừa nãy ra ý tưởng là khi sau khi a[i]++ lên thì sắp xếp từ bé đến lớn để nó kt tiếp mà code mình công nhận lộn xôn thiệt @@
mình vừa nãy ra ý tưởng là khi sau khi a[i]++ lên thì sắp xếp từ bé đến lớn để nó kt tiếp mà code mình công nhận lộn xôn thiệt @@ . Nếu bạn rảnh code vòng while cho mình yk code mình chưa tối ứu và rối quá
Thuật toán của bạn có vẻ chỉ tìm dc một cặp số bằng nhau nên chưa ra kết quả đúng.
Nhận xét của mình như sau: để tìm dc số lớn nhất, ta phải xét hết các cặp bằng nhau, và sinh ra 1 số lớn hơn trước 1 đơn vị. Điều này ngụ ý cho chúng ta là phải xét mảng theo chiều tăng dần, và cũng theo chiều xét đó phải đếm dc bao nhiêu số mới. Ta có công thức tính số cháu chắt của n số có giá trị là a như sau:
Nhiệm vụ tiếp theo là phải sắp xếp và đếm dãy:
giả sử mảng đã sắp sếp theo thứ tự
a<b<c...
và có số lượng tưong ứng làx, y,z
bây giờ tính số con sinh ra từ mẹ có giá trị a->b:
Lặp lại cho đến hết mảng. Sau đó để tìm dc lớn nhất thì số cuối cùng có giá trị m và có số lượng n:
while(n!=1)n/=2,m++;
sẽ tìm dc giá trị lớn nhất.Chạy thử với mảng
3,3,3,3,5
Cặp giá trị và số lượng tương ứng là
{3:4,5:1}
+từ 3->5: số lượng phần tử 5 = 1+4/2^(5-3)=2. Sau bước này dc
{5:2}
+đến đây, do 5 cuối mảng, áp dụng công thức sinh đến con cuối sẽ dc phần tử lớn nhất=6
Nếu bạn sắp xếp lại thì kết quả in dưới dạng toàn bộ mảng sẽ bị sai hết
ừa mình ko biết mình code sai chỗ nào và ý tưởng mình sai chăng
wow ý tưởng tuyệt vời <3