30/09/2018, 23:03

Xác định vị trí của số nguyên tố gần với x nhất

Đề bài là : Nhập một dãy số a có n phần tử là các số nguyên.Nhập số x.Xác định vị trí của số nguyên tố trên a có giá trị gần với x nhất.
Em code như thế này mà ko ra đáp án.Nhờ mn chỉ giáo.

#include <iostream>
#include <math.h>
using namespace std;
int a[100], n, i, j, x, kt;

int nt(int m)
{
	if(m < 2) return 0;
	for(j = 2; j <= sqrt(m); j++)
	{
		if(m%j == 0) return 0;
	}
	return 1;
}

void nhap()
{
	cout << "nhap n = ";
	cin >> n;
	for(i = 0; i < n; i++)
	{
		cout << "a[" << i << "] = ";
		cin >> a[i];
	}
	cout << "x = ";
	cin >> x;
}

void ktra()
{
	kt = 999999;
	for(i = 0; i < n; i++)
	{
		if(abs(x - a[i]) < kt) 
		kt = abs(x - a[i]);
	}
}

void inkq()
{
	cout << "
";
	for(i = 0; i < n; i++)
	{
		if(nt(a[i]) && (abs(x - a[i]) == kt) )
		cout << i << "  ";
	}
}

int main()
{
	nhap();
	ktra();
	inkq();
}
Người bí ẩn viết 01:07 ngày 01/10/2018

Mình cho thuật toán thôi nhé , chứ đang dùng ipad: Đặt Min = INT_MAX, duyệt mảng bình thường, trong mỗi lần lặp, kiểm trả xem a[i] có phải số nguyên tố hay không, nếu phải kiểm tra tiếp x - a[i] có nhỏ hơn Min không, nếu nhỏ hơn cap nhật lại Min. Sau khi duyệt xong thì chỉ việc return Min;

Phạm Ngọc Hiếu viết 01:10 ngày 01/10/2018

tks c, để mình code nhé.

Người bí ẩn viết 01:19 ngày 01/10/2018

Bonus thêm là nhớ tạo 1 biến vitri = 0 nhé, khi gán x - a[i] cho Max thì ta đồng thời gán i cho vitri luôn và cuối cùng return vitri chứ không phải Max nhé

Bài liên quan
0