l4ptrinh
1.
#include <stdio.h>
#include <conio.h>
int A[] = {19, 12, 18, 13, 10, 14, 16, 11, 15, 17}, n=10, count=0;
void Result(int *A, int n){
count++; printf("
Buoc %d:",count);
for(int i=0; i<n; i++) printf("%4d",A[i]);
}
void main(void){
int i, j;
for(i=0; i<n-1; i++){
for(j=i+1; j<n; j++){
if(A[i]>A[j]){
A[i]=A[i] + A[j];
A[j]=A[i]-A[j];
A[i]=A[i] – A[j];
}
}
Result(A,n);
}
}
#include <stdio.h>
#include <conio.h>
int A[] = {19, 12, 18, 13, 10, 14, 16, 11, 15, 17}, n=10, count=0;
void Result(int *A, int n){
count++; printf("
Buoc %d:",count);
int i=0;
while(i<n){
printf("%4d",A[i]);
i++;}
}
void main(void){
int i=0, j;
while(i<n-1){
j=i+1;
while(j<n){
while(A[i]>A[j]){
A[i]=A[i] + A[j];
A[j]=A[i]-A[j];
A[i]=A[i]- A[j];
break;
}
j++;
}
Result(A,n);
i++;
}
getch();
}
2.
Hãy cho biết kết quả thực hiện đoạn chương trình dưới đây.
#include <stdio.h>
#include <conio.h>
int A[] = {19, 12, 18, 13, 10, 14, 16, 11, 15, 17}, n=10, count=0;
void Result(int *A, int n){
count++; printf("
Buoc %d:",count);
for(int i=0; i<n; i++) printf("%4d",A[i]);
}
void main(void){
int i, j, temp;
for(i=1; i<n; i++){ temp = A[i];
for(j=i-1; j>=0 && temp < A[j]; j--){
A[j+1]=A[j];
}
A[j+1] = temp;Result(A,n);
} getch();
}
#include <stdio.h>
#include <conio.h>
int A[] = {19, 12, 18, 13, 10, 14, 16, 11, 15, 17}, n=10, count=0;
void Result(int *A, int n){
count++; printf("
Ket qua buoc %d:",count);
int i=0;
while(i<n){
printf("%4d",A[i]);
i++;}
}
void main(void){ printf("
kq...");
int i=1, j, temp;
while(i<n){
temp = A[i];
j=i-1;
while(j>=0 && temp < A[j]){
A[j+1]=A[j];
j--;
}
A[j+1] = temp;Result(A,n);
i++;
} getch();
}
3.
Hãy cho biết kết quả thực hiện đoạn chương trình dưới đây.
#include <stdio.h>
#include <conio.h>
int A[] = {19, 12, 18, 13, 10, 14, 16, 11, 15, 17}, n=10, count=0;
void Result(int *A, int n){
count++; printf("
Ket qua buoc %d:",count);
for(int i=0; i<n; i++) printf("%4d",A[i]);
}
void main(void){
int i, j, temp;
for(i=1; i<n; i++){
for(j=n-1; j>=i; j--){
if (A[j-1] > A[j]){
temp = A[j-1]; A[j-1] = A[j]; A[j] = temp;
}
}
Result(A,n);
} getch();
}
#include <stdio.h>
#include <conio.h>
int A[] = {19, 12, 18, 13, 10, 14, 16, 11, 15, 17}, n=10, count=0;
void Result(int *A, int n){
count++; printf("
Ket qua buoc %d:",count);
int i=0;
while(i<n){
printf("%4d",A[i]);
i++;}
}
void main(void){ clrscr();
printf("
kq ch tr moi");
int i=1, j, temp;
while(i<n){j=n-1;
while(j>=i){
while (A[j-1] > A[j]){
temp = A[j-1]; A[j-1] = A[j]; A[j] = temp;break;
}
j--;
}
Result(A,n);
i++;
}
getch();
}
4.
Hãy cho biết kết quả thực hiện đoạn chương trình dưới đây:
#include <stdio.h>
#include <conio.h>
int B[]={0,0,0,0,0}, n=5, OK=1, count=0;
void Result(void){
printf("
Ket qua buoc %3d:",++count);
for (int i=0; i<n; i++) printf("%3d",B[i]);
}
void Function1(void){
for(int i=n-1; i>=0 && B[i]; i--)
B[i] =0;
if(i>=0) B[i]=1;
else OK=0;
}
void main(void){
do {
Result();
Function1();
} while(OK);
}
#include <stdio.h>
#include <conio.h>
int B[]={0,0,0,0,0}, n=5, OK=1, count=0;
void Result(void){
printf("
Ket qua %3d:",++count);
int i=0;
while(i<n){
printf("%3d",B[i]);
i++;}
}
void Function1(void){
int i=n-1;
while(i>=0 && B[i])
{B[i] =0;
i--;}
int a=1;
while(i>=0) {B[i]=1; a=0; break;}
while(a) {OK=0; break;}
}
void main(void){
printf("
kq ch tr moi la:");
Result();
Function1();
while(OK) {
Result();
Function1();
}
getch();
}
5.
Hãy cho biết kết quả thực hiện đoạn chương trình dưới đây.
#include <stdio.h>
#include <conio.h>
int B[]={0,0,0,0,0}, n=5,k=3, OK=1, count=0;
void Inketqua(void){
printf("
Ket qua %3d:",++count);
for(int i=0; i<n; i++) printf("%3d",B[i]);
}
void Result(void){
int i, s=0;
for (i=0; i<n; i++) if(B[i]) s++;
if(s==k) Inketqua();
}
void Function1(void){
for(int i=n-1; i>=0 && B[i]; i--)
B[i] =0;
if(i>=0) B[i]=1;
else OK=0;
}
void main(void){
do {
Result();
Function1 ();
} while(OK);
}
#include <stdio.h>
#include <conio.h>
int B[]={0,0,0,0,0}, n=5,k=3, OK=1, count=0;
void Inketqua(void){
printf("
Ket qua %3d:",++count);
int i=0;
while(i<n){
printf("%3d",B[i]);
i++;}
}
void Result(void){
int i=0, s=0;
while(i<n) {while(B[i]){ s++;break;}
i++;}
while(s==k) {Inketqua(); break;}
}
void Function1(void){
int i=n-1;
while(i>=0 && B[i])
{B[i] =0;
i--;}
int a=1;
while(i>=0) {B[i]=1; a=0; break;}
while(a) {OK=0; break;}
}
void main(void){
printf("
kq ch tr moi la:");
Result();
Function1();
while(OK) {
Result();
Function1();
}
getch();
}
6.
Hãy cho biết kết quả thực hiện đoạn chương trình dưới đây.
#include <stdio.h>
#include <conio.h>
int B[]={0,0,0,0,0,0,0}, n=7,k=80, OK=1, count=0;
int A[]={5,10,15,20,25,30,35};
void Inketqua(void){
printf("
Ket qua %3d:",++count);
for(int i=0; i<n; i++)
if(B[i]) printf("%3d",A[i]);
}
void Result(void){
int i, s=0;
for (i=0; i<n; i++) s = s+A[i]*B[i];
if(s==k) Inketqua();
}
void Function1(void){
for(int i=n-1; i>=0 && B[i]; i--)
B[i] =0;
if(i>=0) B[i]=1;
else OK=0;
}
void main(void){
do {
Result();
Function1();
} while(OK);
}
#include <stdio.h>
#include <conio.h>
int B[]={0,0,0,0,0,0,0}, n=7,k=80, OK=1, count=0;
int A[]={5,10,15,20,25,30,35};
void Inketqua(void){
printf("
Ket qua %3d:",++count);
int i=0;
while(i<n){
while(B[i]){
printf("%3d",A[i]);break;}
i++;}
}
void Result(void){
int i=0, s=0;
while(i<n) {s = s+A[i]*B[i]; i++;}
while(s==k) {Inketqua(); break;}
}
void Function1(void){
int i=n-1;
while(i>=0 && B[i])
{B[i] =0;
i--;}
int a=1;
while(i>=0) {B[i]=1; a=0; break;}
while(a) {OK=0; break;}
}
void main(void){
printf("
kq ch tr moi la:");
Result();
Function1();
while(OK) {
Result();
Function1();
}
getch();
7.
Hãy cho biết kết quả thực hiện đoạn chương trình dưới đây.
#include <stdio.h>
#include <conio.h>
int B[]={0,0,0,0,0,0,0}, n=7,k=80, OK=1, count=0;
int A[]={5,10,15,20,25,30,35};
void Inketqua(void){
printf("
Ket qua %3d:",++count);
for(int i=0; i<n; i++) printf("%3d",B[i]);
}
void Result(void){
int i, s=0;
for (i=0; i<n; i++) s = s+A[i]*B[i];
if(s==k) Inketqua();
}
void Function1(void){
for(int i=n-1; i>=0 && B[i]; i--)
B[i] =0;
if(i>=0) B[i]=1;
else OK=0;
}
void main(void){
do {
Result();
Function1();
} while(OK);
}
#include <stdio.h>
#include <conio.h>
int B[]={0,0,0,0,0,0,0}, n=7,k=80, OK=1, count=0;
int A[]={5,10,15,20,25,30,35};
void Inketqua(void){
printf("
Ket qua %3d:",++count);
int i=0;
while(i<n){printf("%3d",B[i]); i++;}
}
void Result(void){
int i=0, s=0;
while(i<n) {s = s+A[i]*B[i]; i++;}
while(s==k) {Inketqua(); break;}
}
void Function1(void){
int i=n-1;
while(i>=0 && B[i])
{B[i] =0;
i--;}
int a=1;
while(i>=0) {B[i]=1; a=0; break;}
while(a) {OK=0; break;}
}
void main(void){
printf("
kq ch tr moi la:");
Result();
Function1();
while(OK) {
Result();
Function1();
}
getch();
}
8.
Hãy cho biết kết quả thực hiện đoạn chương trình dưới đây.
#include <stdio.h>
#include <conio.h>
int B[]={0,0,0,0,0,0,0}, n=7,k=40, OK=1, count=0;
int A[]={5,10,15,20,25,30,35};
void Inketqua(void){
printf("
Ket qua %3d:",++count);
for(int i=0; i<n; i++) printf("%3d",B[i]);
}
void Result(void){
int i, s=0;
for (i=0; i<n; i++) s = s+A[i]*B[i];
if(s<=k) Inketqua();
}
void Function1(void){
for(int i=n-1; i>=0 && B[i]; i--)
B[i] =0;
if(i>=0) B[i]=1;
else OK=0;
}
void main(void){
do {
Result();
Function1();
} while(OK);
}
#include <stdio.h>
#include <conio.h>
int B[]={0,0,0,0,0,0,0}, n=7,k=40, OK=1, count=0;
int A[]={5,10,15,20,25,30,35};
void Inketqua(void){
printf("
Ket qua %3d:",++count);
int i=0;
while(i<n){printf("%3d",B[i]); i++;}
}
void Result(void){
int i=0, s=0;
while(i<n) {s = s+A[i]*B[i]; i++;}
while(s<=k) {Inketqua(); break;}
}
void Function1(void){
int i=n-1;
while(i>=0 && B[i])
{B[i] =0;
i--;}
int a=1;
while(i>=0) {B[i]=1; a=0; break;}
while(a) {OK=0; break;}
}
void main(void){
Result();
Function1();
while(OK) {
Result();
Function1();
}
getch();
}
9.
Hãy cho biết kết quả thực hiện đoạn chương trình dưới đây.
#include <stdio.h>
#include <conio.h>
#include <string.h>
char str[255]="000 001 010 011 100 101 110 111 101 110";
void main(void){ clrscr();
int n, m=0, k=0;n = strlen(str);char s[32];
for(int i=0; i<=n; i++){
switch(str[i]){
case ' ' :
case '\t':
case '
':
case '\r':
case '\0':
if (k>0) {
s[k]='\0';m++;k=0;
printf("
Kết quả bước %d:%s",m,s);
}
break;
default:
s[k++]=str[i]; break;
}
}
}
#include <stdio.h>
#include <conio.h>
#include <string.h>
char str[255]="000 001 010 011 100 101 110 111 101 110";
void main(void){ clrscr();
int n, m=0, k=0;n = strlen(str);char s[32];
int i=0,a=1;
while(i<=n){a=1;
while(str[i]==' '|| str[i]=='\t' || str[i]=='
' || str[i]=='\r' || str[i]=='\0')
{ a=0;
while(k>0) {
s[k]='\0';m++;k=0;
printf("
Ket qua buoc %d:%s",m,s);
break;
}
break;
}
while(a) {s[k++]=str[i]; break;}
i++;
}
getch();
}
10.
Hãy cho biết kết quả thực hiện đoạn chương trình dưới đây.
#include <stdio.h>
#include <conio.h>
#include <math.h>
int nguyen_to(unsigned long int n){
unisened long int i, k=sqrt(n);
for(i=2; i<=k; i++) if(n%i==0) return(0);
return(1);
}
void main(void){
unsigned long int n =2868336900; int k=0,i=2, OK=1;
do {
if(nguyen_to(n)) { printf("
Kết quả bước:%d:%ld",++k,n); OK=0;}
else if (n%i==0){printf("
Kết quả bước:%d: %d",++k,i); n = n/i;}
else i++;
} while(OK);
}
#include <stdio.h>
#include <conio.h>
#include <math.h>
int nguyen_to(unsigned long int n){
unsigned long int i, k=sqrt(n);
i=2;
while(i<=k)
{
while(n%i==0){ return(0);
}
i++;
}
return(1);
}
void main(void){
clrscr();
unsigned long int n =2868336900; int k=0,i=2, OK=1;
int ak=1,bk;
while(nguyen_to(n)) { printf("
Ket qua buoc: %d: %ld",++k,n); OK=0;ak=0;break;}
while(ak)
{ bk=1;
while(n%i==0){printf("
Ket qua buoc: %d: %d",++k,i); n = n/i;bk=0;break;}
while(bk){
i++; break;}
break;
}
while(OK)
{
ak=1;
while(nguyen_to(n)) { printf("
Ket qua buoc: %d: %ld",++k,n); OK=0;ak=0;break;}
while(ak)
{ bk=1;
while(n%i==0){printf("
Ket qua buoc: %d: %d",++k,i); n = n/i;bk=0;break;}
while(bk){
i++; break;}
break;
}
}
getch();
}
1. Hãy viết chương trình liệt kê tất cả các số tự nhiên K thỏa mãn đồng thời những điều kiện dưới đây:
K là số có 5 chữ số;
K là số nguyên tố;
K là số thuận nghịch (k là số thuận nghịch nếu đọc xuôi hay đọc ngược các chữ số của k ta đều nhận được một số như nhau. Ví dụ số: 30303);
Biểu diễn của K ở hệ cơ số B ( B bất kỳ được nhập từ bàn phím cũng là một số thuận nghịch. Ví dụ số k=30303 có biểu diễn ở hệ cơ số 8 là 73137 cũng là một số thuận nghịch;
#include<stdio.h>
#include<conio.h>
#include<math.h>
int s[20],i;
int t_thuannghich(long k)
{
long t=k,kq=0,du;
while(t!=0)
{
du=t%10;
kq=kq*10+du;
t=t/10;
}
if(kq==k) return 1;
return 0;
}
int t_ngto(long k)
{
if(k<=1) return 0;
long c=sqrt(k);
for(i=2;i<=c;i++)
if(k%i==0) return 0;
return 1;
}
int t_bd(long k,int b)
{
int du;
i=1;
s[0]=0;
while(k!=0)
{
du=k%b;
k=k/b;
s[i]=du;
i++;
}
int y=i-1,x=1;
while(x<=y)
{
if(s[x]!=s[y]) return 0;
x++;
y--;
}
return 1;
}
void main()
{
clrscr();
long k;
printf("
Nhap co so bieu dien b: ");
scanf("%d",&b);
printf("
Kqua la:
");
for(k=0;k<=999;k++)
if(t_thuannghich(k) &&t_ngto(k)&& t_bd(k,b) )
{
printf("
%7ld",k);
printf(" Bieu dien o co so %d: ",b);
for(int j=1;j<i;j++)
printf("%2d",s[j]);
}
getch();
}
2. Hãy viết chương trình liệt kê tất cả các số tự nhiên K thỏa mãn đồng thời những điều kiện dưới đây:
K là số có 5 chữ số;
K là số nguyên tố;
Đảo ngược các chữ số trong của K cũng là một số nguyên tố;
Tổng các chữ số của K cũng là một số nguyên tố;
Mỗi chữ số trong K cũng là những số nguyên tố.
#include<stdio.h>
#include<conio.h>
#include<math.h>
int s[20],i;
int t_ngto(long k)
{
if(k<=1) return 0;
long c=sqrt(k);
for(i=2;i<=c;i++)
if(k%i==0) return 0;
return 1;
}
int t_dao(long k)
{
long t=k,kq=0,du;
while(t!=0)
{
du=t%10;
kq=kq*10+du;
t=t/10;
}
if(t_ngto(kq)) return 1;
return 0;
}
int t_tong(long k)
{
long du,tong=0;
while(k!=0)
{
du=k%10;
tong+=du;
k=k/10;
}
if(t_ngto(tong)) return 1;
return 0;
}
int t_so(long k)
{
long du;
while(k!=0)
{
du=k%10;
if(!t_ngto(du)) return 0;
k=k/10;
}
return 1;
}
void main()
{
clrscr();
long k;
printf("
Kqua la:
");
for(k=10000;k<=99999;k++)
if(t_so(k) &&t_ngto(k)&& t_tong(k)&&t_dao(k) )
{
printf("
%7ld",k);
}
getch();
}
3. Hãy viết chương trình liệt kê tất cả các số tự nhiên K thỏa mãn đồng thời những điều kiện dưới đây:
K là số có 5 chữ số;
K là số nguyên tố;
Mỗi chữ số của K cũng là những số nguyên tố;
Tổng các chữ số của K là một số thuận nghịch hai chữ số;
Tích các chữ số của K là một số thuận nghịch ba chữ số.
#include<stdio.h>
#include<conio.h>
#include<math.h>
int s[20],i;
int t_ngto(long k)
{
if(k<=1) return 0;
long c=sqrt(k);
for(i=2;i<=c;i++)
if(k%i==0) return 0;
return 1;
}
int t_so(long k)
{
long du;
while(k!=0)
{
du=k%10;
if(!t_ngto(du)) return 0;
k=k/10;
}
return 1;
}
int t_thuannghich(long k)
{
long t=k,kq=0,du;
while(t!=0)
{
du=t%10;
kq=kq*10+du;
t=t/10;
}
if(kq==k) return 1;
return 0;
}
int t_tong(long k)
{
long kq=0,du;
while(k!=0)
{
du=k%10;
kq=kq+du;
k=k/10;
}
if(kq>=10 && t_thuannghich(kq)) return 1;
return 0;
}
int t_tich(long k)
{
long kq=1,du;
while(k!=0)
{
du=k%10;
kq=kq*du;
k=k/10;
}
if(kq>=100 && kq<=999 && t_thuannghich(kq)) return 1;
return 0;
}
void main()
{
clrscr();
long k;
printf("
Kqua la:
");
for(k=0;k<=99999;k++)
if(t_so(k) &&t_ngto(k)&& t_tong(k)/*&&t_tich(k)*/ )
{
printf("
%7ld",k);
}
getch();
}
4. Hãy viết chương trình liệt kê tất cả các số tự nhiên K thỏa mãn đồng thời những điều kiện dưới đây:
K là số có 5 chữ số;
K là số nguyên tố;
Mỗi chữ số của K cũng là các số nguyên tố;
Tổng các chữ số của K là một số chia hết cho P (P được nhập từ bàn phím);
Tích các chữ số của K là một số chia hết cho Q (Q được nhập từ bàn phím);
Các chữ số của K không chứa số R (được nhập từ bàn phím).
#include<stdio.h>
#include<conio.h>
#include<math.h>
int t_ngto(long k)
{
if(k<=1) return 0;
long c=sqrt(k);
for(i=2;i<=c;i++)
if(k%i==0) return 0;
return 1;
}
int t_so(long k)
{
long du;
while(k!=0)
{
du=k%10;
if(!t_ngto(du)) return 0;
k=k/10;
}
return 1;
}
int t_co(long k,int r)
{
long du;
while(k!=0)
{
du=k%10;
if(du==r) return 0;
k=k/10;
}
return 1;
}
int t_tong(long k,int p)
{
long kq=0,du;
while(k!=0)
{
du=k%10;
kq=kq+du;
k=k/10;
}
if(kq%p==0) return 1;
return 0;
}
int t_tich(long k,int q)
{
long kq=1,du;
while(k!=0)
{
du=k%10;
kq=kq*du;
k=k/10;
}
if(kq%q==0) return 1;
return 0;
}
void main()
{
clrscr();
long k;
int p,q,r;
printf("
Nhap so p: ");
scanf("%d",&p);
printf("
Nhap so q: ");
scanf("%d",&q);
printf("
Nhap so r: ");
scanf("%d",&r);
printf("
Kqua la:
");
for(k=0;k<=99999;k++)
if(t_so(k) &&t_ngto(k)&& t_tong(k,p)&&t_tich(k,q)&& t_co(k,r))
{
printf("
%7ld",k);
}
getch();
}
5. Hãy viết chương trình liệt kê tất cả các số tự nhiên K thỏa mãn đồng thời những điều kiện dưới đây:
K là số có 5, 7 hoặc 9 chữ số;
K là số thuận nghịch;
Tổng các chữ số của K là một số chia hết cho P (P được nhập từ bàn phím);
Tích các chữ số của K là một số chia hết cho Q (Q được nhập từ bàn phím);
Các chữ số của K không chứa số R (được nhập từ bàn phím).
#include<stdio.h>
#include<conio.h>
#include<math.h>
int t_thuannghich(long k)
{
long t=k,kq=0,du;
while(t!=0)
{
du=t%10;
kq=kq*10+du;
t=t/10;
}
if(kq==k) return 1;
return 0;
}
int t_co(long k,int r)
{
long du;
while(k!=0)
{
du=k%10;
if(du==r) return 0;
k=k/10;
}
return 1;
}
int t_tong(long k,int p)
{
long kq=0,du;
while(k!=0)
{
du=k%10;
kq=kq+du;
k=k/10;
}
if(kq%p==0) return 1;
return 0;
}
int t_tich(long k,int q)
{
long kq=1,du;
while(k!=0)
{
du=k%10;
kq=kq*du;
k=k/10;
}
if(kq%q==0) return 1;
return 0;
}
void main()
{
clrscr();
unsigned long int k;
int p,q,r;
printf("
Nhap so p: ");
scanf("%d",&p);
printf("
Nhap so q: ");
scanf("%d",&q);
printf("
Nhap so r: ");
scanf("%d",&r);
printf("
Kqua la:
");
k=10000;
while(k<=99999){
if(t_thuannghich(k)&& t_tong(k,p)&&t_tich(k,q)&& t_co(k,r))
{
printf("
%7ld",k);
}
k++;
}
for(k=1000000;k<=9999999;k++)
if(t_thuannghich(k)&& t_tong(k,p)&&t_tich(k,q)&& t_co(k,r))
{
printf("
%7ld",k);
}
for(k=100000000;k<=999999999;k++)
if(t_thuannghich(k)&& t_tong(k,p)&&t_tich(k,q)&& t_co(k,r))
{
printf("
%7ld",k);
}
getch();
}
6. Cho số tự nhiên N, B được nhập từ bàn phím (N³10000 ; B³255). Hãy viết chương trình thực hiện:
Tính tổng các chữ số của N ;
Phân tích N thành tích các thừa số nguyên tố ;
Biểu diễn N ở hệ cơ số B ;
Liệt kê các số hoàn hảo nhỏ hơn N ;
#include<stdio.h>
#include<conio.h>
#include<math.h>
int s[20],z;
int t_tong(long k)
{
int kq=0,du;
while(k!=0)
{
du=k%10;
kq=kq+du;
k=k/10;
}
return kq;
}
int t_ngto(int k)
{
int q=sqrt(k),du;
if(k<=1) return 0;
for(int i=2;i<=q;i++)
if(k%q==0) return 0;
return 1;
}
void bd(long k,int b)
{
int i=1;
int du;
while(k!=0)
{
du=k%b;
k=k/b;
s[i]=du;
i++;
}
z=i-1;
}
int hoanhao(long k){
long s=0;
for(int i=1; i<k;i++){
if(k%i==0)
s = s +i;
}
if(s==k) return 1;
return 0;
}
void main()
{
clrscr();
long n;
long b;
printf("
Nhap so n: ");
scanf("%ld",&n);
printf("
Nhap so b: ");
scanf("%d",&b);
printf("
Kqua la:
");
printf("
tong cac chu so trong n la: %d",t_tong(n));
printf("
Phan tich n thanh tich cac so nguyen to: ");
int j=2; long k=n;
for(j=2;j<=n;j++)
{
if(t_ngto(j) && n%j==0)
{printf("%d * ",j);
n=n/j;
j=1;}
}
printf("
bieu dien n o co so b: ");
bd(k,b);
for(j=z;j>0;j--)
printf(" %d",s[j]);
printf("
Liet ke cac so hoan hao nho hon n: ??????????? ");
for(int i=1;i<n;i++)
if(hoanhao(i))
{
printf("%d - ",i);
}
getch();
}
7. Số điện thoại di động của một hãng viễn thông được đánh số theo qui cách 091N. XXX.XXX. Trong đó, N là số từ 2 đến 8, X là một số từ 0 đến 9. Ta định nghĩa các loại số điện thoại sau:
Số điện thoại loại I (Loại I): Là những số có sáu số cuối cùng của nó tạo thành một số thuận nghịch sáu chữ số. Ví dụ số: 0913.558855.
Số điện thoại loại II (Loại II): Là những số điện thoại Loại I có tổng sáu chữ số cuối cùng là một số chia hết cho 10 . Ví dụ số: 0913.104.401 (1+0+4+4+0+1=10).
Số điện thoại loại III (Loại III): Là những số điện thoại Loại II có sáu chữ số cuối cùng không chứa bất kỳ một số 0 nào. Ví dụ số: 0913. 122.2211.
Hãy viết chương trình thực hiện:
Liệt kê tất cả các số điện thoại Loại I không chứa các số điện thoại Loại II. Ghi lại các số Loại I vào file Loai1.out theo từng dòng, mỗi dòng không quá 8 số điện thoại.
Liệt kê tất cả các số điện thoại Loại II không chứa các số điện thoại Loại III. Ghi lại các số Loại II vào file Loai2.out theo từng dòng, mỗi dòng không quá 8 số điện thoại.
Liệt kê tất cả các số điện thoại Loại III. Ghi lại các số Loại III vào file Loai3.out theo từng dòng, mỗi dòng không quá 8 số điện thoại.
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
int count=0;
int Test_Thuan_Nghich(long k){
char s1[20],s2[20];
ltoa(k,s1,10); ltoa(k,s2,10);strrev(s2);
if(strcmp(s1, s2)==0) return(1);
return(0);
}
int Test_Tong(long k, int s){
int p=0, du;
while(k!=0){
du=k%10; p = p+ du;k=k/10;
}
if(p%s==0) return(1);
return(0);
}
int Test_Zero(long k){
int du;
while(k!=0){
du = k%10; k=k/10;
if(du==0) return(0);
}
return(1);
}
void main(void){
long k, count1=0, count2=0, count3=0, n;clrscr();
FILE *fp1, *fp2, *fp3;
fp1 = fopen("loai1.out","w"); fprintf(fp1,"
");
fp2 = fopen("loai2.out","w"); fprintf(fp2,"
");
fp3 = fopen("loai3.out","w"); fprintf(fp3,"
");
for(k=100000; k<=999999; k++){
int x = Test_Thuan_Nghich(k);
int y = Test_Tong(k,10);
int z = Test_Zero(k);
if(x!=0 && !y){
count1++;fprintf(fp1,"
");
for(int i=1; i<=7; i++)
fprintf(fp1,"091%d%ld ",i,k);
}
else if( x!=0 && y!=0 && !z){
count2++; fprintf(fp2,"
");
for(int i=1; i<=7; i++)
fprintf(fp2,"091%d%ld ",i,k);
}
else if( x!=0 && y!=0 &&z!=0){
count3++; fprintf(fp3,"
");
for(int i=1; i<=7; i++)
fprintf(fp3,"091%d%ld ",i,k);
}
}
fclose(fp1);fclose(fp2);fclose(fp3);
}
1. Một xâu nhị phân độ dài n được gọi là thuận nghịch hay đối xứng nếu đảo ngược xâu nhị phân đó ta vẫn nhận được chính nó. Cho số tự nhiên n (n nhập từ bàn phím). Hãy viết chương trình liệt kê tất cả các xâu nhị phân thuận nghịch có độ dài n. Các xâu nhị phân tìm được ghi lại trong file ketqua.out theo khôn dạng:
Dòng đầu tiên ghi lại số K là số các xâu thuận nghịch có độ dài n tìm được;
K dòng kế tiếp ghi lại mỗi dòng một xâu nhị phân thuận nghịch có độ dài n. Hai phần tử khác nhau của xâu thuận nghịch được ghi cách nhau một vài khoảng trống.
#include<stdio.h>
#include<conio.h>
#include<math.h>
int n,x[20],ok=1,count=0; FILE *fp;
void init()
{
for(int i=0;i<n;i++)
x[i]=0;
}
void next_bit_string()
{
int i=n-1;
while(i>=0 && x[i]) {x[i]=0; i--;}
if(i>=0) x[i]=1;
else ok=0;
}
int t_thngh()
{
int s=n-1,r=0;
while(r<=s)
{
if(x[r]!=x[s]) return 0;
r++; s--;
}
return 1;
}
void result()
{
fprintf(fp,"%d
",n);
for(int i=0;i<n;i++)
fprintf(fp,"%3d",x[i]);
}
main()
{
printf("
nhap n: ");
scanf("%d",&n);
fp=fopen("kq.out","w");
while(ok)
{
if(t_thngh()){
result(); }
next_bit_string();
}
fclose(fp);
getch();
}
2. Cho một hình chữ nhật gồm n ´ m hình vuông đơn vị (n, m được nhập từ bàn phím). Hãy liệt kê tất cả các đường đi từ đỉnh cuối của ô vuông cuối cùng phía bên trái đến đỉnh đầu của ô vuông trên cùng phía bên phải. Biết mỗi bước đi chỉ đuợc phép dịch chuyển sang bên phải (ký hiệu là bước 1) hoặc lên trên (ký hiệu là bước 0) theo các cạnh của hình vuông đơn vị. Các đường đi tìm được ghi lại trong file ketqua.out theo khuôn dạng sau:
Dòng đầu tiên ghi lại một số tự nhiên là số các đường đi tìm được;
Những dòng kế tiếp mỗi dòng ghi lại một đường đi, bước dịch phải (1) và bước lên trên (0) của mỗi đường đi, hai bước khác nhau được ghi cách nhau bởi một vài ký tự trống.
Ví dụ với n = 3, m = 2 như hình vuông dưới đây sẽ cho ta file ketqua.out tương ứng.
#include<stdio.h>
#include<conio.h>
#include<math.h>
int l,m,n,x[20],ok=1,count=0; FILE *fp;
void init()
{ n=l+m;
for(int i=0;i<n+m;i++)
x[i]=0;
}
void next_bit_string()
{
int i=n-1;
while(i>=0 && x[i]) {x[i]=0; i--;}
if(i>=0) x[i]=1;
else ok=0;
}
{
int s=0;
for(int i=0;i<n;i++){
s=s+x[i];
}
if(s==l) return 1;
return 0;
}
void result()
{
fprintf(fp,"%d
",n);
for(int i=0;i<n;i++)
fprintf(fp,"%3d",x[i]);
}
void in()
{
printf("
kq thu %d: ",++count);
for(int i=0;i<n;i++)
printf("%3d",x[i]);
}
main()
{
ok=1;
printf("
nhap l: ");
scanf("%d",&l);
printf("
nhap m: ");
scanf("%d",&m);
fp=fopen("kq.out","w");
while(ok)
{
if(test()) {
result();
}
next_bit_string();
}
fclose(fp);
getch();
}
3. Cho dãy gồm n số tự nhiên phân biệt a1, a2, .., an và số tự nhiên B. Hãy viết chương trình liệt kê tất cả các phần tử của tập ;
Dữ liệu vào cho bởi file data.in theo khuôn dạng như sau:
Dòng đầu tiên ghi lại hai số tự nhiên n và B. Hai số được viết cách nhau bởi một vài khoảng trống.
Dòng kế tiếp ghi lại n số nguyên dương a1, a2,..,an. Hai số khác nhau được viết cách nhau bởi một vài kí tự trống.
Kết quả ra ghi lại trong file ketqua.out theo khuôn dạng sau:
Dòng đầu tiên ghi lại số tự nhiên k là số phần tử của tập D.
k dòng tiếp theo mỗi dòng ghi lại một vector nhị phân x = (x1, x2 ,.., xn) là phần tử của D. Hai thành phần khác nhau của vector x được viết cách nhau bởi một vài khoảng trống.
Ví dụ với n =7, B = 25, { a1, a2, a3, a4, a5, a6, a7} = {5, 10, 15, 20, 25, 30, 35} trong file data.in sẽ cho ta 3 phần tử của tập D tương ứng với 3 vector nhị phân độ dài n trong file ketqua.out dưới đây:
#include <stdio.h>
#include <conio.h>
#define MAX 100
int B,A[MAX], n, X[MAX],OK=1, count=0;FILE *fp;
void Read_Data(void){
fp = fopen("DAYSO.IN","r");
fscanf(fp,"%d%d",&n,&B);
for(int i=1; i<=n; i++){
X[i]=0;
fscanf(fp,"%d",&A[i]);
}
fclose(fp);
}
void Result(void) {
count++;
fprintf(fp,"
");
for(int i=1; i<=n; i++) {
fprintf(fp,"%3d",X[i]);
}
}
int Test_Phuong_An(void) {
int S=0;
for(int i=1; i<=n; i++){
S = S + A[i]*X[i];
}
if(S == B ) return(1);
return(0);
}
void Next_Bit_String(void){
int i=n;
while (i>0 && X[i]) { X[i]=0; i--;}
if(i>0) X[i] = 1;
else OK=0;
}
void Thuc_Hien(void){
Read_Data();fp=fopen("Daycon.out","w");
while(OK){
if(Test_Phuong_An())
Result();
Next_Bit_String();
}
rewind(fp); fprintf(fp,"%d
",count); fclose(fp);
}
main(void){ Thuc_Hien();}
4. Cho dãy A[] gồm N số tự nhiên khác nhau và số tự nhiên K. Hãy viết chương trình liệt kê tất cả các dãy con của dãy số A[] sao cho tổng các phần tử trong dãy con đó đúng bằng K. Dữ liệu vào cho bởi file dayso.in theo khuôn dạng sau:
Dòng đầu tiên ghi lại số tự nhiên N và K; hai số được viết cách nhau bởi một vài khoảng trống;
Dòng kế tiếp ghi lại N số của dãy số A[], hai số được viết cách nhau một vài khoảng trống.
Các dãy con thoả mãn điều kiện tìm được ghi lại trong file ketqua.out theo khuôn dạng sau:
Dòng đầu tiên ghi lại số các dãy con có tổng các phần tử đúng bằng K tìm được;
Những dòng kế tiếp mỗi dòng ghi lại một dãy con. Hai phần tử khác nhau của dãy con được viết cách nhau bởi một vài khoảng trống.
Ví dụ dưới đây sẽ minh hoạ cho file dayso.in và ketqua.out của bài toán.
#include <stdio.h>
#include <conio.h>
#define MAX 100
int B,A[MAX], n, X[MAX],OK=1, count=0;FILE *fp;
void Read_Data(void){
fp = fopen("DAYSO.IN","r");
fscanf(fp,"%d%d",&n,&B);
for(int i=1; i<=n; i++){
X[i]=0;
fscanf(fp,"%d",&A[i]);
}
fclose(fp);
}
void Result(void) {
count ++;
fprintf(fp,"
");
for(int i=1; i<=n; i++) {
if(X[i]){
fprintf(fp,"%3d",A[i]);
}
}
}
int Test_Phuong_An(void) {
int S=0;
for(int i=1; i<=n; i++){
S = S + A[i]*X[i];
}
if(S == B ) return(1);
return(0);
}
void Next_Bit_String(void){
int i=n;
while (i>0 && X[i]) { X[i]=0; i--;}
if(i>0) X[i] = 1;
else OK=0;
}
void Thuc_Hien(void){
Read_Data();fp=fopen("Daycon.out","w");
while(OK){
if(Test_Phuong_An())
Result();
Next_Bit_String();
}
rewind(fp); fprintf(fp,"%d
",count); fclose(fp);
}
main(void){Thuc_Hien();}
5. Cho ai, ci , B, N (i =1, 2,..,N; N£100) là những số nguyên dương và tập hợp
Hãy viết chương trình tìm phương án tối ưu XOPT =(x1,x2,..,xN) và giá trị tối ưu FOPT=F(XOPT) của hàm mục tiêu
với .
Dữ liệu vào cho bởi file data.in theo khuôn dạng sau:
Dòng đầu tiên ghi lại số tự nhiên N và B. Hai số được viết cách nhau một vài khoảng trống;
Dòng kế tiếp ghi lại N số cj (j=1,2,..,N). Hai số được viết cách nhau một vài khoảng trống;
Dòng kế tiếp ghi lại N số aj (j=1,2,..,N). Hai số được viết cách nhau một vài khoảng trống;
Giá trị tối ưu FOPT và phương án XOPT tìm được ghi lại trong file ketqua.out theo khuôn dạng:
Dòng đầu tiên ghi lại giá trị tối ưu FOPT;
Dòng kế tiếp ghi lại phương án tối ưu XOPT. Hai phần tử khác nhau của phương án tối ưu được viết cách nhau bởi một vài khoảng trống.
Ví dụ với sau sẽ minh họa khuôn dạng cho file data.in và ketqua.out của bài toán.
#include<stdio.h>
#include<conio.h>
int a[10],n,count=0,ok=1,x[10],b,sdmax,sd,c[10]; FILE *fp;
int gtsd()
{
sd=0;
for(int i=0;i<n;i++)
sd=sd+c[i]*x[i];
return sd;
}
void init(void)
{
fp = fopen("CAITUI.IN","r");
fscanf(fp,"%d",&n);
fscanf(fp,"%d",&b);
for(int i=0;i<n;i++)
{
fscanf(fp,"%d",&c[i]);
x[i]=0;
}
for(int i=0;i<n;i++)
fscanf(fp,"%d",&a[i]);
fclose(fp);
}
int test_tluong()
{
int t=0;
for(int i=0;i<n;i++)
t=t+a[i]*x[i];
if(t<=b) return (1);
return 0;
}
void next_bit_string()
{
int i=n-1;
while(i>=0 && x[i])
{x[i]=0;
i--;}
if(i>=0) x[i]=1;
else ok=0;
}
void max()
{
sdmax=gtsd();
while(ok)
{
next_bit_string();
if(test_tluong() && sdmax<gtsd()) sdmax=gtsd();
}
}
main()
{
max();
ok=1;
for(int i=0;i<n;i++)
x[i]=0;
fp=fopen("kq.out","w");
fprintf(fp,"%d
",sdmax);
while(ok)
{
if(test_tluong() && gtsd()==sdmax) {
for(int i=0;i<n;i++)
fprintf(fp,"%3d",x[i]);
fprintf(fp,"
");
}
next_bit_string();
}
fclose(fp);
getch();
}
6. Cho dãy A[] gồm N số tự nhiên khác nhau, số tự nhiên K và số tự nhiên B. Hãy viết chương trình liệt kê tất cả các dãy con K phần tử của dãy số A[] sao cho tổng các phần tử trong dãy con đó đúng bằng B. Dữ liệu vào cho bởi file dayso.in theo khuôn dạng sau:
Dòng đầu tiên ghi lại ba số tự nhiên N, K, B; Ba số được viết cách nhau bởi một vài khoảng trống;
Dòng kế tiếp ghi lại N số của dãy số A[], hai số được viết cách nhau một vài khoảng trống.
Các dãy con K phần tử thoả mãn điều kiện tìm được ghi lại trong file ketqua.out theo khuôn dạng sau:
Dòng đầu tiên ghi lại số các dãy con K phần tử có tổng các phần tử đúng bằng tìm được;
Những dòng kế tiếp mỗi dòng ghi lại một dãy con. Hai phần tử khác nhau của dãy con được viết cách nhau bởi một vài khoảng trống.
Ví dụ dưới đây sẽ minh hoạ cho file dayso.in và ketqua.out của bài toán.
#include<stdio.h>
#include<conio.h>
int a[10],n,count=0,ok=1,x[10],b,k; FILE *fp;
void init()
{
fp = fopen("data.IN","r");
fscanf(fp,"%d",&n);
fscanf(fp,"%d",&k);
fscanf(fp,"%d",&b);
for(int i=1;i<=n;i++)
{
x[i]=i;
fscanf(fp,"%d",&a[i]);
}
fclose(fp);
}
{
int t=0;
for(int i=1;i<=k;i++)
t=t+a[x[i]];
if(t==b) return (1);
return 0;
}
void combination()
{
int i=k;
while(i>0 && x[i]==n-k+i) i--;
if(i>0)
{
x[i]=x[i]+1;
for(int j=i+1;j<=k;j++)
x[j]=x[i]+j-i;
}
else ok=0;
}
main(){
fp=fopen("kq.out","w");
fprintf(fp,"
");
int d=0;
while(ok)
{
if(test()) {
d++;
for(int i=0;i<=k;i++) if(x[i]) fprintf(fp,"%3d",a[x[i]]);
fprintf(fp,"
");
}
combination();
}
rewind(fp);
fprintf(fp,"%d
",d);
fclose(fp);
getch();
}
7. Cho dãy gồm N số nguyên phân biệt A[] = {a1, a2, .., aN } và số tự nhiên K ( K£N£100). Hãy viết chương trình liệt kê tất cả các dãy con K phần tử tăng dần của dãy số A[]. Dữ liệu vào cho bởi file dayso.in theo khuôn dạng sau:
Dòng đầu tiên ghi lại hai số tự nhiên N, K. Hai số được viết cách nhau một vài khoảng trống;
Những dòng kế tiếp ghi lại N số nguyên của dãy số A[], hai số khác nhau được viết cách nhau một vài khoảng trống.
Các dãy con K phần tử tăng dần của dãy số A[] tìm được ghi lại trong file ketqua.out theo khuôn dạng:
Dòng đầu tiên ghi lại số tự nhiên M là số các dãy con K phần tử tăng dần của dãy số A[] tìm được;
M dòng kế tiếp, mỗi dòng ghi lại một dãy con. Hai phần tử khác nhau của dãy con được viết cách nhau bởi một vài khoảng trống.
Ví dụ với file dayso.in dưới đây sẽ cho ta file ketqua.out tương ứng.
#include<stdio.h>
#include<conio.h>
int a[10],n,count=0,ok=1,x[10],b,k; FILE *fp;
void init(void)
{
fp = fopen("data.in","r");
fscanf(fp,"%d",&n);
fscanf(fp,"%d",&k);
for(int i=1;i<=n;i++)
{
x[i]=i;
fscanf(fp,"%d",&a[i]);
}
fclose(fp);
}
{
for(int i=0;i<k;i++)
if(a[x[i]]>a[x[i+1]]) return (0);
return 1;
}
void combination()
{
int i=k;
while(i>0 && x[i]==n-k+i) i--;
if(i>0)
{
x[i]=x[i]+1;
for(int j=i+1;j<=k;j++)
x[j]=x[i]+j-i;
}
else ok=0;
}
main()
{
fp=fopen("kq.out","w");
fprintf(fp,"
");
int d=0;
while(ok)
{
if(test()) {
d++;
for(int i=0;i<=k;i++) if(x[i]) fprintf(fp,"%3d",a[x[i]]);
fprintf(fp,"
");
}
combination();
}
rewind(fp);
fprintf(fp,"%d
",d);
fclose(fp);
getch();
}
8. Cho dãy gồm N số nguyên phân biệt A[] = {a1, a2, .., aN } và số tự nhiên K ( K£N£100). Hãy viết chương trình liệt kê tất cả các dãy con K phần tử giảm của dãy số A[]. Dữ liệu vào cho bởi file dayso.in theo khuôn dạng sau:
Dòng đầu tiên ghi lại hai số tự nhiên N, K. Hai số được viết cách nhau một vài khoảng trống;
Những dòng kế tiếp ghi lại N số nguyên của dãy số A[], hai số khác nhau được viết cách nhau một vài khoảng trống.
Các dãy con K phần tử giảm dần của dãy số A[] tìm được ghi lại trong file ketqua.out theo khuôn dạng:
Dòng đầu tiên ghi lại số tự nhiên M là số các dãy con K phần tử giảm dần của dãy số A[] tìm được;
M dòng kế tiếp, mỗi dòng ghi lại một dãy con. Hai phần tử khác nhau của dãy con được viết cách nhau bởi một vài khoảng trống.
Ví dụ với file dayso.in dưới đây sẽ cho ta file ketqua.out tương ứng.
#include<stdio.h>
#include<conio.h>
int a[10],n,count=0,ok=1,x[10],b,k; FILE *fp;
void init(void)
{
fp =fopen("data.in","r");
fscanf(fp,"%d%d",&n,&k);
for(int i=1;i<=n;i++)
{
x[i]=i;
fscanf(fp,"%d",&a[i]);
}
fclose(fp);
}
{
for(int i=1;i<k;i++)
if(a[x[i]]<a[x[i+1]]) return (0);
return 1;
}
void combination()
{
int i=k;
while(i>0 && x[i]==n-k+i) i--;
if(i>0)
{
x[i]=x[i]+1;
for(int j=i+1;j<=k;j++)
x[j]=x[i]+j-i;
}
else ok=0;
}
main()
{
fp=fopen("kq.out","w");
fprintf(fp,"
");
int d=0;
while(ok)
{
if(test()) {
d++;
for(int i=0;i<=k;i++) if(x[i]) fprintf(fp,"%3d",a[x[i]]);
fprintf(fp,"
");
}
combination();
}
rewind(fp);
fprintf(fp,"%d
",d);
fclose(fp);
getch();
}
9. Cho ma trận vuông C = (cij) cấp N (1£ i, j £ N£100) gồm N2 số tự nhiên (các số không nhất thiết phải khác nhau) ghi lại trong file matran.in theo khuôn dạng sau :
Dòng đầu tiên ghi lại số tự nhiên N là cấp của ma trận vuông C;
N dòng kế tiếp ghi lại ma trận vuông C = (cij). Hai phần tử khác nhau của ma trận được ghi cách nhau bởi một vài khoảng trống.
Hãy viết chương trình lấy trên mỗi hàng, mỗi cột duy nhất một phần tử sao cho tổng các phần tử này là nhỏ nhất. Kết quả tìm được ghi lại trong file ketqua.out theo khuôn dạng:
Dòng đầu tiên ghi lại tổng giá trị nhỏ nhất của N phần tử tìm được;
N dòng kế tiếp, mỗi dòng ghi lại ba số i, j, cij tương ứng với chỉ số hàng, chỉ số cột và giá trị phần tử tương ứng của ma trận. Ba số được viết cách nhau một vài khoảng trống.
Ví dụ về file matran.in và ketqua.out:
#include<stdio.h>
#include<conio.h>
int a[10][10],n,ok=1,x[10],min,count=0; FILE *fp;
void init(void)
{
fp = fopen("data.in","r");
fscanf(fp,"%d",&n);
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
fscanf(fp,"%d",&a[i][j]);
}
x[i]=i;
}
fclose(fp);
}
{
int g=0;
for(int i=1;i<=n;i++)
g=g+a[i][x[i]];
return g;
}
void permutation()
{
int i=n-1;
while(i>0 && x[i]>x[i+1]) i--;
if(i>0)
{
int k=n;
while(x[i]>x[k]) k--;
int temp=x[i]; x[i]=x[k]; x[k]=temp;
int r=i+1, s=n;
while(r<=s)
{
temp=x[r]; x[r]=x[s]; x[s]=temp;
r++; s--;
}
}
else ok=0;
}
void timmin()
{
min=gt();
while(ok)
{
permutation();
if(min>gt()) min=gt();
}
}
main()
{
ok=1;
int d =0;
fp=fopen("kq.out","w");
fprintf(fp,"
");
while(ok)
{
if(gt()==min) {
d++;
fprintf(fp,"%d
",min);
for(int i=1;i<=n;i++)
fprintf(fp,"%3d%3d%5d
",i,x[i],a[i][x[i]]);
}
permutation();
}
rewind(fp);
fprintf(fp,"%d
",d);
fclose(fp);
getch();
}
10. Cho ma trận vuông C = (cij) cấp N (1£ i, j £ N£100) gồm N2 số tự nhiên (các số không nhất thiết phải khác nhau) ghi lại trong file matran.in theo khuôn dạng sau :
Dòng đầu tiên ghi lại số tự nhiên N là cấp của ma trận vuông C;
N dòng kế tiếp ghi lại ma trận vuông C = (cij); Hai phần tử khác nhau của ma trận được ghi cách nhau bởi một vài khoảng trống.
Hãy viết chương trình lấy trên mỗi hàng, mỗi cột duy nhất một phần tử sao cho tổng các phần tử này là lớn nhất. Kết quả tìm được ghi lại trong file ketqua.out theo khuôn dạng:
Dòng đầu tiên ghi lại tổng giá trị nhỏ nhất của N phần tử tìm được;
N dòng kế tiếp, mỗi dòng ghi lại ba số i, j, cij tương ứng với chỉ số hàng, chỉ số cột và giá trị phần tử tương ứng của ma trận. Ba số được viết cách nhau một vài khoảng trống.
Ví dụ về file viec.in và ketqua.out:
#include<stdio.h>
#include<conio.h>
int a[10][10],n,ok=1,x[10],max,count=0; FILE *fp;
void init(void)
{
fp = fopen("data.in","r");
fscanf(fp,"%d",&n);
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
fscanf(fp,"%d",&a[i][j]);
}
x[i]=i;
}
fclose(fp);
}
{
int g=0;
for(int i=1;i<=n;i++)
g=g+a[i][x[i]];
return g;
}
void permutation()
{
int i=n-1;
while(i>0 && x[i]>x[i+1]) i--;
if(i>0)
{
int k=n;
while(x[i]>x[k]) k--;
int temp=x[i]; x[i]=x[k]; x[k]=temp;
int r=i+1, s=n;
while(r<=s)
{
temp=x[r]; x[r]=x[s]; x[s]=temp;
r++; s--;
}
}
else ok=0;
}
void timmax()
{
max=gt();
while(ok)
{
permutation();
if(max<gt()) max=gt();
}
}
main()
{
timmax();
for(int i=1;i<=n;i++) x[i]=i;
ok=1;
int d=0;
fp=fopen("kq.out","w");
fprintf(fp,"
");
while(ok)
{
if(gt()==max) {
d++;
fprintf(fp,"%d
",max);
for(int i=1;i<=n;i++) fprintf(fp,"%3d%3d%5d
",i,x[i],a[i][x[i]]);
}
permutation();
}
rewind(fp);
fprintf(fp,"%d",d);
fclose(fp);
getch();
11. Cho ma trận vuông Ci,j cấp N (1£ i, j £ N£100) gồm N2 số tự nhiên và số tự nhiên K(Các số không nhất thiết phải khác nhau) ghi lại trong file matran.in theo khuôn dạng sau:
Dòng đầu tiên ghi lại số tự nhiên N và K. Hai số được viết cách nhau một vài khoảng trống;
N dòng kế tiếp ghi lại ma trận vuông Ci,j; Hai phần tử khác nhau của ma trận được ghi cách nhau bởi một vài khoảng trống.
Hãy viết chương trình lấy mỗi hàng, mỗi cột duy nhất một phần tử sao cho tổng các phần tử này đúng bằng K. Kết quả tìm được ghi lại trong file ketqua.out theo khuôn dạng:
Dòng đầu tiên ghi lại số các nghiệm tìm được của bài toán.
Những dòng kế tiếp, mỗi dòng ghi lại N số là một phương án của bài toán, số thứ i ghi lại giá trị j tương ứng với chỉ số cột của phần tử được lựa chọn. Các số được viết cách nhau một vài khoảng trống.
Ví dụ về file viec.in và ketqua.out:
#include<stdio.h>
#include<conio.h>
int a[10][10],n,b,ok=1,x[10],count=0; FILE *fp;
void init(void)
{
fp = fopen("data.in","r");
fscanf(fp,"%d%d",&n,&b);
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
fscanf(fp,"%d",&a[i][j]);
}
x[i]=i;
}
fclose(fp);
}
{
int g=0;
for(int i=1;i<=n;i++)
g=g+a[i][x[i]];
return g;
}
void permutation()
{
int i=n-1;
while(i>0 && x[i]>x[i+1]) i--;
if(i>0)
{
int k=n;
while(x[i]>x[k]) k--;
int temp=x[i]; x[i]=x[k]; x[k]=temp;
int r=i+1, s=n;
while(r<=s)
{
temp=x[r]; x[r]=x[s]; x[s]=temp;
r++; s--;
}
}
else ok=0;
}
main()
{
for(int i=1;i<=n;i++) x[i]=i;
ok=1;
int d=0;
fp=fopen("kq.out","w");
fprintf(fp,"
");
while(ok)
{
if(gt()==b) {
fprintf(fp,"
");
d++;
for(int i=1;i<=n;i++) fprintf(fp,"%3d",x[i]);
}
permutation();
}
rewind(fp);
fprintf(fp,"%d",d);
fclose(fp);
getch();
}
TEST4
1. Ta định nghĩa một từ là dãy các ký tự không chứa khoảng trống (space), dấu tab, dấu xuống dòng (‘
’), dấu về đầu dòng (‘\r’) và dấu kết thúc dòng (‘\0’). Cho hai file văn bản DATA1.IN và DATA2.IN. Hãy tìm tập các từ và số lần xuất hiện của mỗi từ trong file DATA1.IN nhưng không xuất hiện trong file DATA2.IN. Các từ tìm được ghi lại trong file Ketqua.out theo khuôn dạng sau:
Dòng đầu tiên ghi lại số tự nhiên K là số từ xuất hiện trong file DATA1.IN nhưng không xuất hiện trong file DATA2.IN;
K dòng kế tiếp, mỗi dòng ghi lại một từ và số lần xuất hiện của từ trong file DATA1.IN nhưng không xuất hiện trong file DATA2.IN.
Ví dụ dưới đây sẽ minh họa cho các file dữ liệu vào và file kết quả của bài toán.
#include<conio.h>
#include<stdio.h>
#include<string.h>
typedef struct{
char tu[100];
int solan;
} word;
FILE *fp;
int Find_Word(word x[],int n, char str[]){
for(int i=1;i<=n;i++){
if(strcmp(x[i].tu, str)==0) return i;
}
return i ;
}
int tach_tu(char name[], word x[]){
char str[20];
int n=0;
fp = fopen(name,"r");
while(!feof(fp)){
fscanf(fp,"%s",str);
int k = Find_Word(x,n,str);
if(k<=n){
x[k].solan++;
}
else {
n++;
strcpy(x[n].tu, str);
x[n].solan=1;
}
}
fclose(fp);return n;
}
int search(word x[], int n, char str[]){
for(int i=1;i<=n;i++){
if(strcmp(x[i].tu, str)==0) return 1;
}
return 0;
}
void hieu(word x1[], int n1, word x2[], int n2){
fp = fopen("kq22.out","w");
int count=0;
fprintf(fp,"
") ;
for(int i=1;i<=n1;i++){
if(!search(x2,n2, x1[i].tu) ){
count ++;
fprintf(fp,"%s%5d
",x1[i].tu, x1[i].solan);
}
}
rewind(fp); fprintf(fp,"%d
",count);
fclose(fp);
}
void main(){
word x1[1000],x2[1000];
int n1 = tach_tu("data1.IN",x1);
int n2 = tach_tu("data2.IN",x2);
hieu(x1,n1,x2,n2);}
2. Ta định nghĩa một từ là dãy các kí tự không chứa khoảng trống (space), dấu tab, dấu xuống dòng (‘
’), dấu về đầu dòng (‘\r’) và dấu kết thúc dòng (‘\0’). Tần xuất xuất hiện của từ W trong tập văn bản D, kí hiệu là P(W) được tính theo công thức:; trong đó N(W) là số lần xuất hiện từ W trong D, N(D) là số từ của văn bản D.Cho file văn bản DATA.IN. Hãy tìm tập các từ và tần xuất xuất hiện của nó trong tập văn bản DATA.IN. Kết quả tìm được ghi lại trong file Ketqua.out theo khuôn dạng sau:
Dòng đầu tiên ghi lại số tự nhiên K là số từ xuất hiện trong file DATA.IN;
K dòng kế tiếp, mỗi dòng ghi lại một từ W và tần xuất xuất hiện của từ đó P(W) trong file DATA.IN. W và P(W) được viết cách nhau bởi một vài khoảng trống.
Ví dụ dưới đây sẽ minh họa cho file DATA.IN và Ketqua.out của bài toán.
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
typedef struct {
char tu[20];
int solan;
} word;
int Find_Word( word taptu[], int n, char str[]) {for(int i=1; i<=n; i++){
if(strcmp(taptu[i].tu, str)==0)
return(i);
}
return(i);
}
void Tan_Xuat_Tu(char name[], word taptu[]){
FILE *fp; fp = fopen(name,"r");
char str[20];int n=0, m=0;
while (!feof(fp)){
fscanf(fp,"%s",str);
m++;
int k = Find_Word(taptu,n, str);
if(k>n) {
n++; strcpy(taptu[n].tu, str);
taptu[n].solan = 1;
}
else taptu[k].solan++;
}
fclose (fp);
fp = fopen("TANXUAT.OUT","w");
printf("
So tu trong file:%d
",n);
for(int i=1; i<=n; i++){
printf("
%s %7.3f", taptu[i].tu, (float)taptu[i].solan/(float)m);
fprintf(fp,"
%s %7.3f", taptu[i].tu, (float)taptu[i].solan/(float)m);
}
getch();
}
void main(void){
word F1[1000];clrscr();
Tan_Xuat_Tu("DATA1.IN",F1);
}
3. Cho tập các số tự nhiên có 5 chữ số trong file data.in được ghi theo từng dòng, mỗi dòng ghi nhiều nhất 5 số, hai số được viết cách nhau một vài khoảng trống. Biết rằng, mỗi số tự nhiên trong file data.in hoặc là số nguyên tố, hoặc là số thuận nghịch và có thể xuất hiện nhiều lần ở những vị trí khác nhau trong file. Hãy viết chương trình tách tập các số và đếm số lần xuất hiện của mỗi số trong file data.in thành 3 file ketqua1.out, ketqua2.out, ketqua3.out thỏa mãn những yêu cầu dưới đây.
File ketqua1.out ghi lại các số nguyên tố nhưng không là số thuận nghịch cùng với số lần xuất hiện của nó trong file data.in;
File ketqua2.out ghi lại các số thuận nghịch nhưng không là nguyên tố cùng với số lần xuất hiện của nó trong file data.in;
File ketqua3.out ghi lại các số vừa là số nguyên tố vừa là số thuận nghịch cùng với số lần xuất hiện của nó trong file data.in;
Khuôn dạng của các file kết quả được qui định như sau:
Dòng đầu tiên của mỗi file ghi lại số các số của mỗi file kết quả;
Những dòng kế tiếp mỗi dòng ghi lại một số cùng với số lần xuất hiện của nó trong file data.in. Hai số được viết cách nhau một vài khoảng trống.
Ví dụ dưới đây minh họa cho các file data.in, ketqua1.out, ketqua2.out và ketqua3.out.
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
typedef struct {
long so;
int solan;
} Tapso;
// kiem tra k la so nguyen to
int Test_Ngto(long k){
long i, p=sqrt(k);
if(k==0||k==1) return(0);
for(i=2; i<=p;i++){
if(k%i==0) return(0);
}
return(1);
}
// kiem tra k la so thuan nghich
int Test_Thng(long k){
long t=k,kq=0,du;
while(t!=0)
{
du=t%10;
kq=kq*10+du;
t=t/10;
}
if(kq==k) return 1;
return 0;
}
//Cap nhat so lan xuat hien cua so
int Test_And_Update( Tapso X[], int n, long k){
for(int i=1; i<=n; i++){
if(X[i].so==k) return(i);
}
return(i);
}
// Ghi ket qua
void Result(Tapso X[], int n, char name[]){
FILE *fp;fp=fopen(name,"w");
fprintf(fp,"%d
",n);
for(int i=1; i<=n; i++){
printf("
%ld%8d",X[i].so,X[i].solan);
fprintf(fp," %ld%8d
",X[i].so,X[i].solan);
}
getch();fclose(fp);
}
void main(void){
FILE *fp; fp = fopen("file.in","r");
int n1=0, n2=0, n3=0;long k;clrscr();
Tapso X1[100],X2[100],X3[100];
while(!feof(fp)){
fscanf(fp,"%ld",&k);
int p=Test_Ngto(k);
int q = Test_Thng(k);
if(p!=0 && q==0){
int r = Test_And_Update(X1,n1,k);
if(r<=n1) X1[r].solan++;
else {
n1=r;X1[n1].so=k; X1[n1].solan=1;
}
}
else if(p==0 && q!=0){
int r = Test_And_Update(X2,n2,k);
if(r<=n2) X2[r].solan++;
else {
n2=r;X2[n2].so=k; X2[n2].solan=1;
}
}
else {
int r = Test_And_Update(X3,n3,k);
if(r<=n3) X3[r].solan++;
else {
n3=r;X3[n3].so=k; X3[n3].solan=1;
}
}
}
fclose(fp);
printf("
So nguyen to:");
Result(X1,n1,"KETQUA1.OUT");
printf("
So thuan nghich:");
Result(X2,n2,"KETQUA2.OUT");
printf("
Vua nguye to vua nghich:");
Result(X3,n3,"KETQUA3.OUT");
}
TEST5
1. Cho đồ thị vô hướng G =<V,E> gồm N đỉnh và M cạnh. Ta định nghĩa khuôn dạng lưu trữ đồ thị bằng ma trận kề, danh sách cạnh, danh sách kề dưới dạng file như sau:
Khuôn dạng file ma trận kề:
Dòng đầu tiên ghi lại số tự nhiên N là số đỉnh của đồ thị;
N dòng kế tiếp ghi lại ma trận kề của đồ thị, hai phần tử khác nhau của ma trận kề được ghi cách nhau bởi một vài ký tự trống.
Khuôn dạng file danh sách cạnh:
Dòng đầu tiên ghi lại số tự nhiên N và M tương ứng với số đỉnh và số cạnh của đồ thị, hai số được ghi cách nhau bởi một vài ký tự trống;
M dòng kế tiếp mỗi dòng ghi lại một cạnh của đồ thị, đỉnh đầu và đỉnh cuối của mỗi cạnh được ghi cách nhau bởi một vài ký tự trống.
Khuôn dạng file danh sách kề:
Dòng đầu tiên ghi lại số tự nhiên N là số đỉnh của đồ thị;
N dòng kế tiếp mỗi dòng ghi lại danh sách kề của đỉnh tương ứng. Hai đỉnh trong cùng một danh sách kề được phân biệt với nhau bằng một hoặc vài kí tự trống, đỉnh không có cạnh nối với nó (đỉnh cô lập) được ghi giá trị 0.
Cho file dske.in biểu diễn đồ thị dưới dạng danh sách cạnh. Hãy viết chương trình chuyển đổi biểu diễn đồ thị thành các file dưới dạng ma trận kề (mtke.out) và danh sách cạnh (dscanh.out).
Ví dụ đồ thị gồm 5 đỉnh, 5 cạnh được biểu diễn trong file dske.in như dưới đây sẽ cho ta các file mtke.out và dscanh.out tương ứng.
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<string.h>
#define MAX 100
FILE *fp;
int a[MAX][MAX],n,m=0;
void init(){
for(int i = 1; i<=n;i++)
for(int j = 1; j<=n;j++)
a[i][j]=0;
}
void mtke(){
int dau,cuoi,k=0;
char str[255],tu[32];
fp = fopen("DSKE.IN","r");
fgets(str,255,fp);
n =atoi(str);
for(dau=1;dau<=n;dau++)
{
fgets(str,255,fp);
for(int j = 0; j<=strlen(str);j++){
if(str[j]!=' '&&str[j]!='
'&&str[j]!='\t'&&str[j]!='\0'){
tu[k] = str[j];
k++;
}
else if(k>0 && (str[j]==' '||str[j]=='
'||str[j]=='\t'||str[j]=='\0') ){
tu[k]='\0';
k=0;
cuoi = atoi(tu);
if(cuoi!=0){
m++;
a[dau][cuoi]=1;
}
}
}
}
fclose(fp);
fp = fopen("mtke1.out","w");
fprintf(fp,"%d
",n);
printf("%d",m/2);
for(int i = 1;i<=n;i++){
for(int j=1;j<=n;j++){
fprintf(fp,"%5d",a[i][j]);
}
fprintf(fp,"
");
}
fclose(fp);
}
void dscanh(){
fp = fopen("dscanh1.out","w");
fprintf(fp,"%d%5d
",n,m/2);
// printf("%d",m/2);
for(int i=1;i<n;i++){
for(int j=i+1;j<=n;j++){
if(a[i][j])
fprintf(fp,"%d%5d
",i,j);
}
}
fclose(fp);
}
main(){
mtke();
dscanh();
getch();
}
2. Cho đồ thị vô hướng G =<V,E> gồm N đỉnh và M cạnh. Ta định nghĩa khuôn dạng lưu trữ đồ thị bằng ma trận kề, danh sách cạnh, danh sách kề dưới dạng file như sau:
Khuôn dạng file ma trận kề:
Dòng đầu tiên ghi lại số tự nhiên N là số đỉnh của đồ thị;
N dòng kế tiếp ghi lại ma trận kề của đồ thị, hai phần tử khác nhau của ma trận kề được ghi cách nhau bởi một vài ký tự trống.
Khuôn dạng file danh sách cạnh:
Dòng đầu tiên ghi lại số tự nhiên N và M tương ứng với số đỉnh và số cạnh của đồ thị, hai số được ghi cách nhau bởi một vài ký tự trống;
M dòng kế tiếp mỗi dòng ghi lại một cạnh của đồ thị, đỉnh đầu và đỉnh cuối của mỗi cạnh được ghi cách nhau bởi một vài ký tự trống.
Khuôn dạng file danh sách kề:
Dòng đầu tiên ghi lại số tự nhiên N là số đỉnh của đồ thị;
N dòng kế tiếp mỗi dòng ghi lại danh sách kề của đỉnh tương ứng. Hai đỉnh trong cùng một danh sách kề được phân biệt với nhau bằng một hoặc vài kí tự trống, đỉnh không có cạnh nối với nó (đỉnh cô lập) được ghi giá trị 0.
Cho file mtke.in biểu diễn đồ thị dưới dạng ma trận kề. Hãy viết chương trình chuyển đổi biểu diễn đồ thị thành các file dưới dạng danh sách cạnh (dscanh.out) và danh sách kề (dske.out).
Ví dụ đồ thị gồm 5 đỉnh, 5 cạnh được biểu diễn trong file mtke.in như dưới đây sẽ cho ta các file dscanh.out và dske.out tương ứng.
#include<stdio.h>
#include<conio.h>
#define MAX 100
FILE *fp;
int a[MAX][MAX],n,m=0;
void read(){
fp = fopen("DOTHI.IN","r");
fscanf(fp,"%d",&n);
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
fscanf(fp,"%d",&a[i][j]);
m = m+a[i][j];
}
}
m =m/2;
fclose(fp);
}
void dscanh(){
fp = fopen("dscanh1.out","w");
fprintf(fp,"%d%5d
",n,m);
for(int i=1;i<n;i++){
for(int j=i+1;j<=n;j++){
if(a[i][j]!=0)
fprintf(fp,"%d%5d
",i,j);
}
}
fclose(fp);
}
void dske(){
fp = fopen("dske1.out","w");
fprintf(fp,"%d%
",n);
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(a[i][j]!=0)
fprintf(fp,"%5d
",j);
}
fprintf(fp,"
");
}
fclose(fp);
}
main(){
read();
dscanh();
getch();
}
3. Cho đồ thị vô hướng G =<V,E> gồm N đỉnh và M cạnh. Ta định nghĩa khuôn dạng lưu trữ đồ thị bằng ma trận kề, danh sách cạnh, danh sách kề dưới dạng file như sau:
Khuôn dạng file ma trận kề:
Dòng đầu tiên ghi lại số tự nhiên N là số đỉnh của đồ thị;
N dòng kế tiếp ghi lại ma trận kề của đồ thị, hai phần tử khác nhau của ma trận kề được ghi cách nhau bởi một vài ký tự trống.
Khuôn dạng file danh sách cạnh:
Dòng đầu tiên ghi lại số tự nhiên N và M tương ứng với số đỉnh và số cạnh của đồ thị, hai số được ghi cách nhau bởi một vài ký tự trống;
M dòng kế tiếp mỗi dòng ghi lại một cạnh của đồ thị, đỉnh đầu và đỉnh cuối của mỗi cạnh được ghi cách nhau bởi một vài ký tự trống.
Khuôn dạng file danh sách kề:
Dòng đầu tiên ghi lại số tự nhiên N là số đỉnh của đồ thị;
N dòng kế tiếp mỗi dòng ghi lại danh sách kề của đỉnh tương ứng. Hai đỉnh trong cùng một danh sách kề được phân biệt với nhau bằng một hoặc vài kí tự trống, đỉnh không có cạnh nối với nó (đỉnh cô lập) được ghi giá trị 0.
Cho file canh.in biểu diễn đồ thị dưới dạng danh sách cạnh. Hãy viết chương trình chuyển đổi biểu diễn đồ thị thành các file dưới dạng ma trận kề (mtke.out) và danh sách kề (dske.out).
Ví dụ đồ thị gồm 5 đỉnh, 5 cạnh được biểu diễn trong file mtke.in như dưới đây sẽ cho ta các file dscanh.out và dske.out tương ứng.
#include<stdio.h>
#include<conio.h>
#define MAX 100
FILE *fp;
int n,m,a[MAX][MAX];
//danh sach canh sang mt ke, ds ke
void init(){
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
a[i][j]=0;
}
void read(){
int dau,cuoi;
fp=fopen("DSCANH.IN","r");
fscanf(fp,"%d%d",&n,&m);
for(int i=1;i<=m;i++){
fscanf(fp,"%d%d",&dau,&cuoi);
a[dau][cuoi]=1;
a[cuoi][dau]=1;
}
fclose(fp);
}
void mtke(){
fp = fopen("mtke1.out","w");
fprintf(fp,"%d
",n);
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
fprintf(fp,"%5d",a[i][j]);
}
fprintf(fp,"
");
}
fclose(fp);
}
void dske(){
fp = fopen("dske1.out","w");
fprintf(fp,"%d
",n);
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(a[i][j])
fprintf(fp,"%5d",j);
}
fprintf(fp,"
");
}
fclose(fp);
}
main(){
read();
dske();
mtke();
}
Bạn đang đọc truyện trên: AzTruyen.Top