프로 그래 밍 연습 (1)
12335 단어 데이터 구조
1 이런 숫자 가 있어 요. ABCD. * E ==DCBA, 그 중 각 숫자 가 같 지 않 습 니 다. 프로그램 을 만들어 서 ABCD 가 각각 어떤 숫자 를 대표 하 는 지 계산 합 니 다.
#include
int fun(int i,int j);
int reverse(int i);
int main()
{
int i,j;
for (i=1000; i<9999; i++)
for(j=1; j<10; j++)
{
if(i*j==reverse(i)&&fun(i,j))
{
printf("%d
",i);
printf("* %d
",j);
printf("-------
");
printf("%d
",i*j);
}
}
return 0;
}
int reverse(int i)// i
{
int r=0;
while(i)
{
r=r*10+i%10;
i=i/10;
}
return r;
}
int fun(int i,int j)//
{
int buf[4],k=0;
while(i)
{
buf[k]=i%10;
i=i/10;
k++;
}
if(buf[0]==buf[1])
return 0;
if(buf[0]==buf[2])return 0;
if(buf[0]==buf[3])return 0;
if(buf[0]==j)return 0;
if(buf[1]==buf[2])return 0;
if(buf[1]==buf[3])return 0;
if(buf[1]==j)return 0;
if(buf[2]==buf[3])return 0;
if(buf[2]==j)return 0;
if(buf[3]==j)return 0;
return 1;
}
2
3 쌍 의 신혼부부 가 결혼식 에 참석 했다. 3 명의 신랑 은 A, B, C 이 고 3 명의 신 부 는 X, Y, Z 이다. 누가 누구 와 결 혼 했 는 지 모 르 는 사람 이 있어 서 6 명의 신인 중 3 명 에 게 물 었 다. 그러나 A 는 X 와 결혼 할 것 이 라 고 말 했다. X 는 약혼자 가 C: C 라 고 말 하고 Z 와 결혼 할 것 이 라 고 말 했다.이 사람 은 듣 고 나 서 그들 이 농담 을 하고 있다 는 것 을 알 았 는데, 모두 거짓말 이 었 다.누가 누구 와 결혼 할 지 프로 그래 밍 해 보 세 요.
#include
int match(int i,int j,int k,char wife[]);
int main()
{
char husband[3]= {'A','B','C'},wife[3]= {'X','Y','Z'};
int i,j,k;
for (i=0; i<3; i++)
for (j=0; j<3; j++)
for (k=0; k<3; k++)
if(i!=j&&i!=k&&j!=k)
{
if(match(i,j,k,wife))
{
printf("husband wife
");
printf("A----%c
",wife[i]);
printf("B----%c
",wife[j]);
printf("C----%c
",wife[k]);
}
}
return 0;
}
int match(int i,int j,int k,char wife[])
{
if(wife[i]=='X')return 0;
if(wife[k]=='X')return 0;
if(wife[k]=='Z')return 0;
return 1;
}
3 분해 질 인수
#include
int isPrime(int a)//
{
int i;
for(i=2; i<=a-1; i++)
{
if(a%i==0)
return 0;
}
return 1;
}
void PrimeFactor(int n)// ,
{
int i;
if(isPrime(n))
printf("%d",n);
else
{
for(i=2; i<=n-1; i++)
{
if(n%i==0)
printf("%d ",i);
if(isPrime(n/i))
{
printf("%d ",n/i);
break;
}
else
PrimeFactor(n/i);
break;
}
}
}
int main()
{
int n;
scanf("%d",&n);
PrimeFactor(n);
return 0;
}
4. 판 타지 방진, n * n 의 행렬 에 n ^ 2 개의 숫자 를 입력 하여 모든 줄, 각 열 과 두 대각선 의 합 을 똑 같이 합 니 다.
해법:
#include
int match(int i, int j, int k, int l, int m, int n, int o, int p, int q)
{
if(i!=j && i!=k && i!=l && i!=m && i!=n && i!=o && i!=p && i!=q && j!=k && j!=l && j!=m && j!=n && j!=o && j!=p && j!=q && k!=l && k!=m && k!=n && k!=o && k!=p && k!=q && l!=m && l!=n && l!=o && l!=p && l!=q && m!=n && m!=o && m!=p && m!=q && n!=o && n!=p && n!=q && o!=p && o!=q && p!=q)
return 1;
else
return 0;
}
int justic(int i, int j, int k ,int l, int m, int n, int o, int p, int q)
{
if(i+j+k==l+m+n && i+j+k==o+p+q && i+l+o==j+m+p && i+l+o==k+n+q && i+m+q==k+m+o)
return 1;
else
return 0;
}
void getMatrix()
{
int i,j,k,l,m,n,o,p,q;
for(i=1;i<=9;i++)
for(j=1;j<=9;j++)
for(k=1;k<=9;k++)
for(l=1;l<=9;l++)
for(m=1;m<=9;m++)
for(n=1;n<=9;n++)
for(o=1;o<=9;o++)
for(p=1;p<=9;p++)
for(q=1;q<=9;q++)
{
if(match(i,j,k,l,m,n,o,p,q))
if(justic(i,j,k,l,m,n,o,p,q)){
printf("%d %d %d
",i,j,k);
printf("%d %d %d
",l,m,n);
printf("%d %d %d
",o,p,q);
return;
}
}
}
int main(int argc, char *argv[])
{
getMatrix();
return 0;
}
또 다른 간단 한 해법: 순서대로 1 부터 N ^ 2 까지 행렬 에 채 우 고 채 우 는 위 치 는 다음 과 같은 규칙 이 있 습 니 다.
*첫 번 째 요 소 는 첫 번 째 줄 중간 에 놓 여 있 습 니 다.
* 다음 요 소 는 현재 요소 의 이전 줄, 다음 열 에 저 장 됩 니 다.
*이전 줄, 다음 열 에 내용 이 있 으 면 다음 요 소 는 현재 열 다음 줄 에 저 장 됩 니 다.
5 1 ~ 8 이라는 8 개의 숫자 를 무 작위 로 3 * 3 의 바깥쪽 동그라미 에 채 우 고 가운데 빈 동그라미 만 남 았 다.매번 빈 동그라미 로 만 이동 할 수 있 도록 규정 하고, 수 진의 숫자 를 질서 있 게 해 야 한다.
본질은 정렬 이 고 교환 성 을 가 진 정렬 방법 이다.나 는 정렬 을 선택 하고 거품 을 일 으 켜 정렬 할 수도 있다.
#include
void Print(int m[]);
int getstep(int m[]);
int main()
{
int i , m[8];
for(i=0 ; i<8 ; i++)
scanf("%d",&m[i]);
Print(m);
printf("
");
getstep(m);
Print(m);
return 0;
}
void Print(int m[])
{
printf("[%d]--[%d]--[%d]
",m[0],m[1],m[2]);
printf("| %c | %c |
" , 92 , 47);
printf("[%d]--[ --[%d]
",m[7],m[3]);
printf("| %c | %c |
" , 47 , 92);
printf("[%d]--[%d]--[%d]
",m[6],m[5],m[4]);
}
int getstep(int m[])
{
int i , j , temp;
for (i =0 ; i<7 ; i++)
for(j=0; j<7-i; j++)
if(m[j]>m[j+1])
{
temp=m[j];
m[j]=m[j+1];
m[j+1]=temp;
}
}
(6) 3 명의 용의자 가 법관 앞에서 각자 주장 을 한다. 갑 은 을 이 거짓말 을 한다. 을 은 병 이 거짓말 을 한다 고 말한다.병: 갑 과 을 두 사람 모두 거짓말 을 하고 있다.판사 가 어려움 을 위해 갑 을 병 세 사람 은 도대체 누가 거짓말 을 하고 있 습 니까? 누가 진실 을 말 했 습 니까?[제목 분석] 이것 은 매우 재 미 있 는 논리 추리 문제 다.이런 논리 적 추리 문 제 를 해결 하 는 가장 간단 하고 직관 적 인 방법 은 궁 거 법 을 사용 하 는 것 이다.갑 을 병 세 사람 중 누구든지 한 말 은 두 가지 가능성 이 있 는데 그것 이 바로 진실 과 거짓 이다.1 로 진 위 를 표시 하고 0 으로 가 위 를 표시 하면 갑 을 병 3 명 이 한 말의 진 위 는 다음 과 같은 범위 로 한정한다.갑 을 병 000 001...
#include
int main()
{
int a,b,c;
for (a=0; a<=1; a++)
for (b=0; b<=1; b++)
for (c=0; c<=1; c++)
if((a&&!b || !a&&b) && (b&&!c || !b&&c) && (c&&a+b==0 || !c&&a+b!=0))
{
printf(" told a %s
",a?"truth":"lie");
printf(" told a %s
",b?"truth":"lie");
printf(" told a %s
",c?"truth":"lie");
}
return 0;
}
(7) 사방 의 정 리 를 검증한다.
모든 자연 수 는 최대 4 개의 제곱 합 만 있 으 면 프로그램 검증 을 작성 할 수 있 습 니 다.
#include
int mode_1(int n) //N=a^2
{
int i;
for(i=1;i
이 해법 은 생각 하기는 간단 하지만 너무 길다.다음은 다른 해법 입 니 다. 이 해법 은 비교적 교묘 합 니 다. 저 는 생각 지도 못 하고 가르침 을 받 았 습 니 다.
# include
# include
int f(int n, int a[], int idx)
{
int i;
if(n==0) return 1;
if(idx==4) return 0;
for( i=(int)sqrt(n); i>=1; i--)
{
a[idx] = i;
if(i * i == n || f(n - i * i, a, idx + 1)) return 1; //
}
return 0;
}
int main(int argc, char* argv[])
{
for(;;)
{
int number;
scanf("%d",&number);
int a[] = {0,0,0,0};
int r = f(number, a, 0);
printf("%d: %d %d %d %d
", r, a[0], a[1], a[2], a[3]);
}
return 0;
}
(8) 정수 시퀀스 에서 가장 작은 요 소 를 찾 아 재 귀 하 는 방법 으로 프로그램 을 작성 합 니 다.
# include
#define N 100
int GetMin(int a[] , int n)
{
int v1, v2 , v3;
if(n==1)
return a[0];
if(n%2==0) // ,
{
v1=GetMin(a, n/2);
v2=GetMin(a+n/2 , n/2);
if(v1>v2)
return v2;
else
return v1;
}
if(n%2!=0)
{
v1=GetMin(a, n/2);
v2=GetMin(a+n/2+1 , n/2);
v3=a[n/2];
if(v1
(9) 어부 조업 문제 A, B, C, D, E 등 5 개 어 부 는 야간 에 함께 조업 을 하 다가 새벽 에 지 쳐 각자 강가 숲 에서 자 리 를 찾 아 잠 이 들 었 다.해 가 중천 에 떴 을 때 어부 A 가 제일 먼저 깨 어 나 자 그 는 물고 기 를 5 인분 으로 나 누 어 나머지 한 마 리 를 강 에 던 져 자신의 몫 을 집 으로 가 져 갔다.어부 B 가 두 번 째 로 깨 어 나 도 물고 기 를 5 인분 으로 나 누고 남 은 한 마 리 를 버 리 고 자신의 몫 을 가 져 갔다. 이 어 C, D, E 가 차례대로 깨 어 나 도 똑 같은 방법 으로 물고 기 를 나 누 어 5 명의 어부 에 게 적어도 몇 마리 의 물고 기 를 잡 았 느 냐 고 물 었 다.시험 편성 프로그램 산출
이 문 제 를 해결 하려 면 마지막 어부 부터 시작 해 야 한다. 물고 기 를 나 누 는 원칙 에 따라 마지막 으로 남 은 것 은 6, 11, 16, 21 일 수 있다. 6 으로 가입 하면 D 는 8.5 로 논리 에 맞지 않 는 다.그래서 E 가능 한 값 을 다시 가 져 옵 니 다.
# include
#define MAX 1000
int main()
{
int last_fish;
int s;
int flag;
int i , n;
for(n=1; n
(10) 미인 대회 현장에서 한 무리의 선수 들 이 경기 에 참가 하 는데 경기 의 규칙 은 마지막 득점 이 높 을 수록 순위 가 낮 다 는 것 이다. 경기 가 결 동 될 때 현장에서 선수 의 출전 순서 (즉 선수 의 번호) 에 따라 최종 득점 과 최종 순 위 를 발표 해 야 한다. 같은 점 수 를 얻 은 선 수 는 같은 순위, 순위 연속 번 호 를 가지 고 같은 순위 의 선수 수 를 고려 하지 않 아 도 된다.예 를 들 어 선수 번 호 는 1, 2, 3, 4, 5, 6, 7 선수 의 점 수 는 5, 3, 4, 7, 3, 5, 6 등 이다.
3,1,2,5,1,3,4
이 문 제 는 배열 로 해결 할 수 없 으 므 로 구조 체 를 결합 하여 구조 체 배열 을 구성 해 야 한다.
# include
typedef struct player
{
int num;
int score;
int rand;
} P;
void sortScore(P psn[],int n)
{
int i,j;
P temp;
for(i=0;ipsn[j+1].score)
{
temp=psn[j];
psn[j]=psn[j+1];
psn[j+1]=temp;
}
}
}
void setRand(P psn[] , int n)
{
int i,j=2;
psn[0].rand=1;
for(i=1;ipsn[j+1].num)
{
tmp=psn[j];
psn[j]=psn[j+1];
psn[j+1]=tmp;
}
}
}
void sortRand(P psn[],int n)
{
sortScore(psn,n);//
setRand(psn,n);//
sortNum(psn,n);//
}
int main()
{
P psn[7]= {{1,5,0},{2,3,0},{3,4,0},{4,7,0},{5,3,0},{6,5,0},{7,6,0}};
int i;
sortRand(psn , 7);
printf("num score rand
");
for(i=0;i<7;i++)
{
printf("%d%6d%6d
",psn[i].num, psn[i].score, psn[i].rand);
}
return 0;
}
(11) 순서 표 의 현지 역 치
원 표 의 저장 공간 을 이용 하여 순서 표를 역 설정 하 다.
#include
#include
#define MAXSIZE 10
typedef struct
{
int *base;
int length;
} sqlist;
void reverse(sqlist *l)//
{
int low=0 , high=l->length-1;
int buf , i;
for(i=0;ilength/2 ; i++)
{
buf=l->base[low];
l->base[low] = l->base[high];
l->base[high]= buf;
low++;
high--;
}
}
int main()
{
int a,i=0;
sqlist l;
l.base=(int *)malloc(sizeof(int)*MAXSIZE);
l.length=0;
scanf("%d",&a);
while(i<=9&&a!= -1)
{
l.base[i]=a;
l.length++;
i++;
scanf("%d",&a);
}
reverse(&l);
for(i=0; i
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
정수 반전Udemy 에서 공부 한 것을 중얼거린다 Chapter3【Integer Reversal】 (예) 문자열로 숫자를 반전 (toString, split, reverse, join) 인수의 수치 (n)가 0보다 위 또는 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.