Số đối xứng lớn nhất.
Sunday, December 7, 2014
Số
đối xứng lớn nhất.
Cho số tự nhiên N. Số N là đối xứng
nếu đọc từ trái qua phải và từ phải qua trái là như nhau. Cho phép đổi chỗ các
chữ số của N. Hãy cho biết có thể đổi chỗ một số các chữ số để nhận được một số
đối xứng hay không? Nếu có hãy đưa ra số lớn nhất nhận được. n<2.109
Với bài tiến hành đếm các chữ số
xuất hiện trong số N lưu vào mảng. Và tiến hành kiểm tra.
Có
2 trường hợp có thể ghép được số đối xứng max:
Nếu số chữ số của N là lẻ + 1 chữ số xuất hiện với số lần lẻ,
các chữ số còn lại xuất hiện chẵn số lần.
và nếu số chữ số của N là chẵn
+ số lần các chữ số xuất hiện đều chẵn.
Còn lại các
trường hợp khác không thể ghép được số đối xứng.
Đến
việc ghép số.
nếu lẻ số các chữ số
của N thì chừa 1 vị trí chính giữa ra để chèn số đơn không có đôi vào.
Nếu số các chữ số chắn
thì ghép bình thường.
Để
ghép được dãy max thì
lấy số lớn nhất, xét ngược từ 9->0 trong dãy đếm làm số đầu tiên. Và dần định
hình sẽ lấy chữ số đó làm chữ số cuối
cùng. Và tiếp tục các số tương ứng.
Code - lập trình C
Bài đơn giản hóa đề
tí. Lược bỏ phần đọc tệp. nhập N là
số test. Và nhập lần lượt từng test từ bàn phím.
// code dungnv
#include <stdio.h>
#include <conio.h>
int a[10];
int kiemtra(unsigned long x)
{
if (x==0)
return 0;
for (int i=0;i<=9;i++) a[i]=0;
while
(x!=0)
{
a[x%10]++;
x=x/10;
}
int
dem1=0,dem2=0;
for (int i=0;i<=9;i++)
{
dem1+=a[i];
if
(a[i]%2!=0) dem2++;
}
if
(dem1%2==1&&dem2==1) return 1;
if
(dem1%2==0&&dem2==0) return 1;
return 0;
}
unsigned long ghepsomax(unsigned
long x)
{
unsigned long k=0;
int tg=0;
for (int i=9;i>=0;i--)
{
if
(a[i]!=0)
{
if
(a[i]%2==1) tg=i;
for
(int j=0;j<a[i]/2;j++)
{
k+=i;
k=k*10;
}
}
}
if (tg!=0)
k+=tg; else k=k/10;
for (int i=0;i<=9;i++)
{
if
(a[i]!=0)
{
for
(int j=0;j<a[i]/2;j++)
{
k=k*10;
k+=i;
}
}
}
return k;
}
int main()
{
int n;
unsigned long x;
printf("\nNhap
n = ");
scanf("%d",&n);
for (int i=0;i<n;i++)
{
printf("\nNhap
test %d
:",i+1);
scanf("%lu",&x);
if
(kiemtra(x)) printf("\nYES %lu",ghepsomax(x));
else
printf("\nNo");
}
getch();
}
Code - lập trình C
Bài đầy đủ viết theo ngôn ngữ lập trình C theo yêu cầu đề
thêm phần đọc tệp và ghi tệp chỉ chỉnh sửa bài trên 1 tí.
File dữ liệu vào (input.txt)
các bạn tạo ở địa chỉ nền ổ C. C\\: input.txt
nhập các test vào
để chạy chương trình.
File dữ liệu ra (output.txt) được
tạo ở nền ổ C. Vào C\\: output.txt
để xem kết quả.
// code dungnv
#include <stdio.h>
#include <conio.h>
int a[10];
int kiemtra(unsigned long x)
{
if (x==0) return 0;
for (int i=0;i<=9;i++) a[i]=0;
while
(x!=0)
{
a[x%10]++;
x=x/10;
}
int
dem1=0,dem2=0;
for (int i=0;i<=9;i++)
{
dem1+=a[i];
if
(a[i]%2!=0) dem2++;
}
if
(dem1%2==1&&dem2==1) return 1;
if
(dem1%2==0&&dem2==0) return 1;
return 0;
}
unsigned long ghepsomax(unsigned
long x)
{
unsigned long k=0;
int tg=0;
for (int i=9;i>=0;i--)
{
if
(a[i]!=0)
{
if
(a[i]%2==1) tg=i;
for
(int j=0;j<a[i]/2;j++)
{
k+=i;
k=k*10;
}
}
}
if (tg!=0)
k+=tg; else k=k/10;
for (int i=0;i<=9;i++)
{
if
(a[i]!=0)
{
for
(int j=0;j<a[i]/2;j++)
{
k=k*10;
k+=i;
}
}
}
return k;
}
int main()
{
int n;
unsigned long x;
FILE *u,*v;
u=fopen("C:\\input.txt","rt");
v=fopen("C:\\output.txt","wt");
fscanf(u,"%d",&n);
for (int i=0;i<n;i++)
{
fscanf(u,"%lu",&x);
if
(kiemtra(x)) fprintf(v,"\nYES %lu",ghepsomax(x));
else
fprintf(v,"\nNo");
}
fclose(u);
fclose(v);
printf("\nHOAN
TAT moi xem ket qua tai c:\\output.txt ");
getch();
}
ảnh test

- Câu 4.10: Cho một tệp văn bản gồm các số nguyên cách nhau ít nhất một dấu cách trống. Hãy tính và in ra màn hình tổng của các phần tử đọc ra từ tệp.
- Câu 4.9: Cho một tệp văn bản gồm các xâu ký tự. Viết chương trình đọc tệp, đếm và in ra màn hình số chữ cái ‘A‘ có mặt trong tệp
- Câu 4.8: Cho một tệp văn bản gồm các số nguyên cách nhau ít nhất một dấu cách trống. Hãy tính và in ra màn hình trung bình cộng của các phần tử đọc ra từ tệp.
- Câu 4.7: Cho một tệp văn bản gồm các số nguyên cách nhau ít nhất một dấu cách trống. Hãy đọc các số nguyên từ tệp ra, tính và in ra màn hình tổng các số có giá trị lẻ.
- Câu 4.6: Cho một tệp văn bản gồm các xâu ký tự. Viết chương trình đọc tệp, đếm và in ra màn hình số chữ cái in hoa có mặt trong tệp
- Câu 4.5: Tạo một tệp văn bản gồm hai dòng, mỗi dòng một xâu ký tự. Đọc và in ra màn hình nội dung của tệp.
- Câu 4.4: Viết chương trình nhập vào từ bàn phím n số nguyên, hãy ghi các số nguyên dương vào một tệp văn bản
- Câu 4.3: Cho một tệp văn bản gồm các số nguyên cách nhau ít nhất một dấu cách trống. Hãy đọc tệp, đếm và in ra màn hình số phần tử dương có mặt trong tệp
- Câu 4.2: Cho một tệp văn bản gồm các số nguyên cách nhau ít nhất một dấu cách trống. Hãy đọc các số nguyên từ tệp ra, tính và in ra màn hình tổng các số có giá trị chẵn
- Câu 4.1: Viết chương trình nhập vào từ bàn phím n số thực, hãy ghi các số thực dương vào một tệp văn bản
- Cho một tệp văn bản input.txt chứa các phần tử nguyên không âm, các phần tử cách nhau ít nhất một dấu cách trống hoặc ít nhất một dấu xuống dòng. Viết chương trình đổi các số nguyên đọc ra từ tệp input.txt thành xâu nhị phân và xâu hexa tương ứng. Kết quả đưa vào tệp văn bản output.txt theo dạng: n ----> xâu nhị phân -----> xâu hexa (1 điểm)
- Viết chương trình nhập vào một ma trận có kích thước m x n.thực hiện công việc sắp xếp các cột của ma trận theo thứ tự giảm dần.
All comments [ 0 ]
Your comments