Huyzz
Gà con
1. Giới thiệu
Một xe robot Arduino di chuyển trong một mặt phẳng bắt đầu từ điểm gốc (0,0). Xe có thể di chuyển theo hướng LÊN, XUỐNG, TRÁI và PHẢI với một số bước nhất định. Sinh viên hãy viết chương trình tính khoảng cách từ vị trí hiện tại sau một chuỗi chuyển động so với điểm điểm gốc ban đầu. Sau đó kiểm tra khoảng cách là một số chính phương hay một số nguyên tố.
Lưu ý: Nếu khoảng cách là dạng số thực (Float), thì chỉ cần làm tròn thành dạng in số nguyên (Int).Hint: sử dụng hàm round()
2. Dữ liệu nhập
Dữ liệu nhập của chương trình được là một chuỗi các kỹ tự gồm chữ và số (xem thêm ví dụ ở phần dữ liệu xuất). Chuỗi này chứa kiểu kí tự theo định dạng sau:
direction, steps
directions: giá trị này cho biết hướng đi của xe Arduino trên mặt phẳng được ký hiệu như sau U (di lên), D (đi xuống), L (bên trái), R (bên phải)
steps: giá trị này cho biết số bước mà xe đi trên mặt phẳng
3. Dữ liệu xuất
Chương trình sẽ xuất trực tiếp ra màn hình khoảng cách mà xe đã đi được và kiểm tra xem giá trị của khoảng cách này là một số nguyên tố hay số chính phương
Giả sử rằng chương trình sẽ được nhập vào các giá trị tuần tự được liệt kê dưới đây.
U5D3L3R2
Chương trình sẽ thực thi và xuất ra màn hình kết quả như sau:
Khoảng cách xe đã di chuyển từ vị trí ban đầu tới điểm hiện tại: 2
Số 2 là số nguyên tố
#include <cmath>
#include <iostream>
#include <string>
using namespace std;
int move(string moves)
{
char direction[100];
int length[100];
int x, y;
x = 0;
y = 0;
int slen = moves.length();
int num_direc=0;
int num_length = 0;
//chuyen tu string ve cac array
for (int i = 0;i< slen;i++)
{
if (moves < 60 && moves > 40)
{
length[num_length] = (int)(moves-'0');
while (moves[i+1] < 60 && moves[i+1] > 40)
{
length[num_length] = length[num_length] * 10 + (int)(moves[i+1] - '0');
i++;
}
num_length++;
}
else
{
direction[num_direc] = moves;
num_direc++;
}
}
// tim toa do cua Arduino
for (int i = 0; i < num_direc; i++)
{
if (direction == 'L') { x -= length; }
if (direction == 'R') { x += length; }
if (direction == 'D') { y -= length; }
if (direction == 'U') { y += length; }
}
// tinh khoan cach theo toa do
float distance;
distance = sqrt(x * x + y * y);
return round(distance);
}
bool isPrime(int n)
{
if (n < 2) return 0;
for (int i = 2; i < sqrt(n); i++)
{
if (n % i == 0) return 0;
}
return 1;
}
bool isSquared(int n)
{
if (n < 1) return 0;
if (sqrt(n) - int(sqrt(n)) == 0) return 1;
return 0;
}
int main()
{
string moves;
int distance;
bool primality, squared;
cin >> moves;
distance = move(moves);
cout << "Khoang cach xe da di chuyen tu vi tri ban dau toi diem hien tai: "
<< distance << '\n';
primality = isPrime(distance);
squared = isSquared(distance);
if (primality) {
cout << "So " << distance << " la so nguyen to\n";
}
if (squared) {
cout << "So " << distance << " la so chinh phuong\n";
}
return 0;
}
Em đã thử nhiều cách nhưng vẫn bị sai hidden test. Có ai biết code của em sai ở đâu không ạ.
Một xe robot Arduino di chuyển trong một mặt phẳng bắt đầu từ điểm gốc (0,0). Xe có thể di chuyển theo hướng LÊN, XUỐNG, TRÁI và PHẢI với một số bước nhất định. Sinh viên hãy viết chương trình tính khoảng cách từ vị trí hiện tại sau một chuỗi chuyển động so với điểm điểm gốc ban đầu. Sau đó kiểm tra khoảng cách là một số chính phương hay một số nguyên tố.
Lưu ý: Nếu khoảng cách là dạng số thực (Float), thì chỉ cần làm tròn thành dạng in số nguyên (Int).Hint: sử dụng hàm round()
2. Dữ liệu nhập
Dữ liệu nhập của chương trình được là một chuỗi các kỹ tự gồm chữ và số (xem thêm ví dụ ở phần dữ liệu xuất). Chuỗi này chứa kiểu kí tự theo định dạng sau:
direction, steps
directions: giá trị này cho biết hướng đi của xe Arduino trên mặt phẳng được ký hiệu như sau U (di lên), D (đi xuống), L (bên trái), R (bên phải)
steps: giá trị này cho biết số bước mà xe đi trên mặt phẳng
3. Dữ liệu xuất
Chương trình sẽ xuất trực tiếp ra màn hình khoảng cách mà xe đã đi được và kiểm tra xem giá trị của khoảng cách này là một số nguyên tố hay số chính phương
Giả sử rằng chương trình sẽ được nhập vào các giá trị tuần tự được liệt kê dưới đây.
U5D3L3R2
Chương trình sẽ thực thi và xuất ra màn hình kết quả như sau:
Khoảng cách xe đã di chuyển từ vị trí ban đầu tới điểm hiện tại: 2
Số 2 là số nguyên tố
#include <cmath>
#include <iostream>
#include <string>
using namespace std;
int move(string moves)
{
char direction[100];
int length[100];
int x, y;
x = 0;
y = 0;
int slen = moves.length();
int num_direc=0;
int num_length = 0;
//chuyen tu string ve cac array
for (int i = 0;i< slen;i++)
{
if (moves < 60 && moves > 40)
{
length[num_length] = (int)(moves-'0');
while (moves[i+1] < 60 && moves[i+1] > 40)
{
length[num_length] = length[num_length] * 10 + (int)(moves[i+1] - '0');
i++;
}
num_length++;
}
else
{
direction[num_direc] = moves;
num_direc++;
}
}
// tim toa do cua Arduino
for (int i = 0; i < num_direc; i++)
{
if (direction == 'L') { x -= length; }
if (direction == 'R') { x += length; }
if (direction == 'D') { y -= length; }
if (direction == 'U') { y += length; }
}
// tinh khoan cach theo toa do
float distance;
distance = sqrt(x * x + y * y);
return round(distance);
}
bool isPrime(int n)
{
if (n < 2) return 0;
for (int i = 2; i < sqrt(n); i++)
{
if (n % i == 0) return 0;
}
return 1;
}
bool isSquared(int n)
{
if (n < 1) return 0;
if (sqrt(n) - int(sqrt(n)) == 0) return 1;
return 0;
}
int main()
{
string moves;
int distance;
bool primality, squared;
cin >> moves;
distance = move(moves);
cout << "Khoang cach xe da di chuyen tu vi tri ban dau toi diem hien tai: "
<< distance << '\n';
primality = isPrime(distance);
squared = isSquared(distance);
if (primality) {
cout << "So " << distance << " la so nguyen to\n";
}
if (squared) {
cout << "So " << distance << " la so chinh phuong\n";
}
return 0;
}
Em đã thử nhiều cách nhưng vẫn bị sai hidden test. Có ai biết code của em sai ở đâu không ạ.