Originally posted by 11520132
View Post
Announcement
Collapse
No announcement yet.
[Thuật toán] Cần tìm cách giải khác cho một nài toán cũ rích
Collapse
X
-
Originally posted by 11520327 View Postarr.IndexOf nó hoạt động bên dưới như thế nào chắc b cũng biết mà. Cơ bản thì cũng như b viết vòng for thôi. Tính ra thì cũng 3 for.
for (i=0;i<arr.length;++i) for (j=0;j<arr.lenght;++j) thôi => O(n2)Last edited by 11520132; 22-11-2014, 00:55.
Comment
-
Em năm nhất, đang học mảng, bon chen tý, đang bí bài " nhhập vào mảng, liệt kê tần suất xuất hiện các phần tử trong mảng, moi phần tử liêt kê 1 lần", dự là sẽ xắp xếp tăng dần trước nếu a[i]<[ai+1] thì mới sử lý đếm vậy là ko bị trùng.....em viết code bị lặp vô tận, anh nào giúp voi, thân
void HoanVi(int &a, int &b)
{
int temp = a;
a = b;
b = temp;
}
void BubleSort(int A[], int n)
{
for (int i = 0; i<n - 1; i++)
for (int j = n - 1; j>i; j--)
if (A[j]<A[j - 1])
HoanVi(A[j], A[j - 1]);
}
void tansuat(int a[], int n)
{
int dem = 0;
int tam ;
BubleSort(a, n);
for (int i = 0; i < n;i++)
{
if (a[i] < a[i + 1])
{
tam = a[i];
for (int j = 0; j < n; j++)
if (a[j] == tam)
dem++;
printf("%d\t", tam);
printf("%d\n", dem);
}
}
}
Comment
-
Originally posted by 14520214 View PostEm năm nhất, đang học mảng, bon chen tý, đang bí bài " nhhập vào mảng, liệt kê tần suất xuất hiện các phần tử trong mảng, moi phần tử liêt kê 1 lần", dự là sẽ xắp xếp tăng dần trước nếu a[i]<[ai+1] thì mới sử lý đếm vậy là ko bị trùng.....em viết code bị lặp vô tận, anh nào giúp voi, thân
void HoanVi(int &a, int &b)
{
int temp = a;
a = b;
b = temp;
}
void BubleSort(int A[], int n)
{
for (int i = 0; i<n - 1; i++)
for (int j = n - 1; j>i; j--)
if (A[j]<A[j - 1])
HoanVi(A[j], A[j - 1]);
}
void tansuat(int a[], int n)
{
int dem = 0;
int tam ;
BubleSort(a, n);
for (int i = 0; i < n;i++)
{
if (a[i] < a[i + 1])
{
tam = a[i];
for (int j = 0; j < n; j++)
if (a[j] == tam)
dem++;
printf("%d\t", tam);
printf("%d\n", dem);
}
}
}
Comment
-
Originally posted by 11520272 View PostTrường hợp này nó có thể có nhiều hơn 1 phần tử giống nó?Last edited by tara95; 21-11-2014, 09:28.I don't know the secret to success, but the secret to failure is trying to please everyone
Comment
-
Originally posted by 14520214 View PostEm năm nhất, đang học mảng, bon chen tý, đang bí bài " nhhập vào mảng, liệt kê tần suất xuất hiện các phần tử trong mảng, moi phần tử liêt kê 1 lần", dự là sẽ xắp xếp tăng dần trước nếu a[i]<[ai+1] thì mới sử lý đếm vậy là ko bị trùng.....em viết code bị lặp vô tận, anh nào giúp voi, thânCode:#include <stdio.h> void HoanVi(int &a, int &b) { int temp = a; a = b; b = temp; } void BubleSort(int A[], int n) { for (int i = 0; i < n - 1; i++) for (int j = n - 1; j > i; j--) if (A[j] < A[j - 1]) HoanVi(A[j], A[j - 1]); } void tansuat(int a[], int n) { int dem = 0; int tam ; BubleSort(a, n); for (int i = 0; i < n;i++) { if (a[i] < a[i + 1]) { tam = a[i]; for (int j = 0; j < n; j++) if (a[j] == tam) dem++; printf("%d\t", tam); printf("%d\n", dem); } } } int main() { int arr[15] = {1, 2, 3, 4, 1, 6, 2, 3, 7, 1, 7, 1, 8, 4, 1}; tansuat(arr,15); return 0; }
Last edited by tara95; 21-11-2014, 09:29.I don't know the secret to success, but the secret to failure is trying to please everyone
Comment
-
Mọi người thử thuật toán củ chuối với 2 vòng for này của mình xem
#include <iostream>
using namespace std;
int main()
{
int a[100],n,i,j,mark;
{
// Nhap mang ...
}
// Xử lí
for(i=0;i<n;i++)
{
mark=-1;
for(j=0;j<n;j++)
if (a[i]==a[j]&& i!=j) mark=j;
if(mark<i && mark !=-1)
cout<< a[i] <<" ";
}
}Last edited by 14520674; 21-11-2014, 11:06.PHP Code:Full name: Thai Viet Phong
Facebook: www.facebook.com/ThaiVietPhong.ITM
Email: thaivietphong.net@gmail.com
Tìm trước khi hỏi bạn sẽ giỏi hơn mỗi khi tìm
Comment
-
Originally posted by 14520674 View PostMọi người thử thuật toán củ chuối với 2 vòng for này của mình xemCode:#include <iostream> using namespace std; int main() { int a[15] = {1, 2, 3, 4, 1, 6, 2, 3, 7, 1, 7, 1, 8, 4, 1}; int n=15; for(int i=0;i<n;i++) { int mark=-1; for(int j=0;j<n;j++) if (a[i]==a[j]&& i!=j) mark=j; if(mark<i && mark !=-1) cout<< a[i] <<" "; } return 0; }
Comment
-
Originally posted by 11520327 View PostCode:#include <iostream> using namespace std; int main() { int a[15] = {1, 2, 3, 4, 1, 6, 2, 3, 7, 1, 7, 1, 8, 4, 1}; int n=15; for(int i=0;i<n;i++) { int mark=-1; for(int j=0;j<n;j++) if (a[i]==a[j]&& i!=j) mark=j; if(mark<i && mark !=-1) cout<< a[i] <<" "; } return 0; }
Với trường hợp này, nếu các phần tử ai giới hạn bé hơn khoảng 10^8 (vì lớn hơn có thể mảng không chứa nổi) thì mình có thể tạo một mảng đánh dấu. Các phần tử sẽ có 3 trạng thái là đã in, xuất hiện lần đầu, và trạng thái còn lại. Như vậy độ phức tạp chỉ là O(n) thôi.
PHP Code:nội dung file input.txt:
15
1 2 3 4 1 6 2 3 7 1 7 1 8 4 1
source
#include <iostream>
#include <cstdio>
using namespace std;
char arr[100000001];
int n,x;
int main() {
freopen("input.txt","r",stdin);
memset(arr,0,sizeof(arr));
cin>>n;
while(n--){
cin>>x;
arr[x]++;
if(arr[x]==0) arr[x]--;
else if(arr[x]>1) arr[x]=-1, cout<<x<<" ";
}
return 0;
}
PHP Code:nội dung file input.txt:
15
1 2 3 4 1 6 2 3 7 1 7 1 8 4 1
source code với ai trong kiểu long long int (2^63 -1)
#include <iostream>
#include <cstdio>
#include <map>
using namespace std;
typedef long long int ll;
int n,x;
map<ll, int> mm;
int main() {
freopen("input.txt","r",stdin);
cin>>n;
while(n--){
cin>>x;
mm[x]++;
if(mm[x]==0) mm[x]--;
else if(mm[x]>1) mm[x]=-1,cout<<x<<" ";
}
return 0;
}
University of Information Technology
Cao Văn Nhàn _ CE10520355
SĐT: 0188 403 4943
Email: caovannhan2002@gmail.com
Comment
-
Originally posted by 10520355 View PostLâu lâu dạo forum, anh có cách này chia sẻ chứ không em cứ nghĩ cách của em là tối ưu nữa.
Với trường hợp này, nếu các phần tử ai giới hạn bé hơn khoảng 10^8 (vì lớn hơn có thể mảng không chứa nổi) thì mình có thể tạo một mảng đánh dấu. Các phần tử sẽ có 3 trạng thái là đã in, xuất hiện lần đầu, và trạng thái còn lại. Như vậy độ phức tạp chỉ là O(n) thôi.
Nếu ai lớn hơn 10^8 thì các bạn có thể sử dụng cấu dữ liệu vào để giảm độ phức tạp, ví dụ cây nhị phân, hoặc đại loại nhị phân để giảm còn O(nLog) Trong C++ có cấu trúc map, các bạn có thể dùng.
Comment
-
Ngồi buồn cắn móng tay
Code:ex = [1, 2, 3, 4, 1, 6, 2, 3, 7, 1, 7, 1, 8, 4, 1] def unduplicate(arr): checker = 0 occurred = 0 length = len(arr) for i in range(length): checker |= 1 << i for l in range(i + 1, length): if (not(checker >> l) % 2) and (arr[l] == arr[i]): checker |= 1 << l if not occurred: print arr[i] occurred = 1 occurred = 0 unduplicate(ex)
Last edited by 08520021; 21-11-2014, 16:28.
Comment
-
Mọi người ngó qua đoạn code của em phát. Em năm 1 trình độ nhập môn lập trình ạ ^^
#include <stdio.h>
#include <conio.h>
void main()
{
int a[15] = { 1, 2, 3, 4, 1, 6, 2, 3, 7, 1, 7, 1, 8, 4, 1 };
for (int i = 0; i <= 14; i++)
{
int out = 0;
for (int j = 0; (j <= 14); j++)
{
if (j == i)
continue;
else
if (a[j] == a[i])
if (j < i)
break;
else
out = 1;
}
if (out == 1)
printf("%3d", a[i]);
}
getch();
}
Comment
Comment