Mã:
(3, 0)
(1, 150)
(1, 200)
(1, 180)
(3, 360)
(4, 30)
(1, 300)
(4, 150)
(6, 200)
(3, 120)
(1, 0)
(3, 80)
(3, 200)
(1, 120)
(4, 150)
(1, 240)
(3, 320)
(1, 60)
(2, 360)
(4, 200)
Tam giac deu: (3, 80), (3, 200), (3, 320)
Tam giac vuong: (1, 180), (1, 0), (1, 150)
Tam giac vuong: (1, 180), (1, 0), (1, 200)
Tam giac vuong: (1, 180), (1, 0), (1, 300)
Tam giac vuong: (1, 180), (1, 0), (1, 120)
Tam giac vuong: (1, 180), (1, 0), (1, 240)
Tam giac vuong: (1, 180), (1, 0), (1, 60)
Tam giac vuong: (1, 300), (1, 120), (1, 150)
Tam giac vuong: (1, 300), (1, 120), (1, 200)
Tam giac vuong: (1, 300), (1, 120), (1, 180)
Tam giac vuong: (1, 300), (1, 120), (1, 0)
Tam giac vuong: (1, 300), (1, 120), (1, 240)
Tam giac vuong: (1, 300), (1, 120), (1, 60)
Tam giac deu: (1, 0), (1, 120), (1, 240)
Tam giac vuong: (1, 240), (1, 60), (1, 150)
Tam giac vuong: (1, 240), (1, 60), (1, 200)
Tam giac vuong: (1, 240), (1, 60), (1, 180)
Tam giac vuong: (1, 240), (1, 60), (1, 300)
Tam giac vuong: (1, 240), (1, 60), (1, 0)
Tam giac vuong: (1, 240), (1, 60), (1, 120)
Mã:
#include <conio.h>
#include <stdio.h>
#include <string.h>
#include <math.h>
#define MAX 1000 // so phan tu dau vao
int main() {
int i, j, k, h, n, m; // bien vong lap
int pos; // vi tri xet
int flag; // co xet
FILE *f; // con tro file
// luu data dau vao
struct polar
{
int r; // luu r dau vao
int pi; // luu pi dau vao
int flag; //
} polar[MAX];
// luu ket qua loc
struct save{
int r; // luu r
int pi[MAX]; // luu pi khac
int n; // so phan tu pi
} save;
/*
doc data
*/
f = fopen("input.text","rt"); // mo file
fscanf(f, "%d", &n); // do so phan tu dong dau
for (i = 0; i < n; i++) // doc va in du lieu ra man hinh
{
fscanf(f, "%d %d", &polar[i].r, &polar[i].pi); // doc du lieu vao struct
polar[i].flag = 1; // dat co xet
printf("(%d, %d)\n", polar[i].r, polar[i].pi); // in ra man hinh
}
fclose(f); // dong file
/*
loc cap r trung PI khac
*/
pos = 0; // phan tu lam moc xet
do
{
if (polar[pos].flag == 0) // da xet, bo qua vong nay
{
pos += 1;
continue;
}
// co ghi nhay cach pos
flag = 0;
// luu phan tu lam moc
save.r = polar[pos].r;
save.pi[0] = polar[pos].pi;
save.n = 0;
// tim trung r
for (j = pos + 1; j < n; j++)
{
if (polar[j].flag == 0) // bo qua neu da xet
{
continue;
}
else // chua xet
{
if (polar[j].r == save.r) // r trung
{
polar[j].flag = 0; // bat co da xet
if (polar[j].pi != save.pi[0]) // pi khac
{
save.pi[save.n + 1] = polar[j].pi; // luu pi vao save
save.n += 1; // tang so phan tu save
}
}
else // r khac
{
if (flag == 0) // ghi vi tri, bat co nhay pos lan dau
{
pos = j;
flag = 1;
}
}
}
}
// cung r trung ma co 3 pi khac, loc dinh tam giac vuong hoac deu
if (save.n + 1 > 2)
{
for(i = 0; i < save.n + 1; i++)
{
for (k = i + 1; k < save.n + 1; k++)
{
// tam giac vuong
if (abs(save.pi[i] - save.pi[k]) == 180)
{
for (m = 0; m < save.n + 1; m++)
{
if ((m != i) && (m != k))
{
printf("Tam giac vuong: (%d, %d), (%d, %d), (%d, %d)\n", save.r, save.pi[i], save.r, save.pi[k], save.r, save.pi[m]);
}
}
}
// tam giac deu
if (abs(save.pi[i] - save.pi[k]) == 120)
{
for (h = k + 1; h < save.n + 1; h++)
{
if (abs(save.pi[h] - save.pi[k]) == 120)
{
printf("Tam giac deu: (%d, %d), (%d, %d), (%d, %d)\n", save.r, save.pi[i], save.r, save.pi[k], save.r, save.pi[h]);
}
}
}
}
}
}
// khong nhay cach tang pos len 1
if (flag == 0) pos += 1;
} while (pos < n - 1);
getch();
}
Còn bạn nào có thuật toán cao hơn thì cứ post nha (mình tự học lập trình chứ không qua trường lớp đâu, nói mấy công thức toán cao cấp cũng chịu, thuật toán tự nghĩ ra là chính, con người xử lý thế nào, cho máy xử lý thế đó, công đoạn nào lược bớt được thì rút ngắt thời gian xử lý, với mình đó gọi là tối ưu)