베오베 돌아다니다가 두달전에 작성한 글을 보았는데요 (이 글이 과게였으니깐 과게)
0을 제외한 서로 다른 4개의 수를 사칙연산만을 이용해서 10을 만들 수 있는지 증명해달라시는 글이었어요 밑에 링크
제가 요즘 씨언어를 막 배우기 시작해서 어? 이거한번 씨언어로 해보자 싶어서 한참을 끙끙거리다가 만들었네요 ㅋㅋ
실행시키면 랜덤으로 수를 4개 생성시키고 4개의 수들이 사칙연산중 랜덤으로 한개의 연산을 3번 실행시키는거예요
그리고 이 값이 10일 경우 메모장에 저장하는거고요 중복제외
결론은 서로다른 9개중 4개를 선택하는 126가지 모든 경우의 수가 다 사칙연산만으로 10이 나오더라고요 (저분글 댓글에서 오유님들의 힘으로 다 구하시긴하셨지만)
음...... 그냥 만들어 본게 뿌듯해서 끄적거려봤어요 ㅋㅋ
그냥 만들어 본 코드나 투척 이제 막 배워서 비효율적이고 난잡할꺼예요 ㅋㅋ
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define MAX 350000
int randomnumber();
void add1();
void subtraction1();
void multiplication1();
void division1();
void randomform1();
void add2();
void subtraction2();
void subtraction21();
void multiplication2();
void division2();
void division21();
void randomform2();
void add3();
void subtraction3();
void multiplication3();
void division3();
void randomform3();
void line();
void makenumber();
int number[4];
int i,j;
int least,temp;
float a1,a2,a3;
int onenum;//각 자리 숫자
int count;
int wantnumber;
int bigline[MAX];
int main(void)
{
srand((unsigned)time(NULL));
for(count=0;count<MAX;count++)
{
makenumber();
randomform1();
randomform2();
randomform3();//a3즉 결과값이 나옴
if(a3==10)
{ line();//a3를 만들기위한 처음의 4자리수를 오름차순
wantnumber=(number[0]*1000)+(number[1]*100)+(number[2]*10)+number[3];
bigline[count]=wantnumber;
}
}
for(i=0;i<MAX-1;i++)
{
least=i;
for(j=i+1;j<MAX;j++)
if(bigline[j]<bigline[least])
least=j;
temp = bigline[i];
bigline[i]=bigline[least];
bigline[least]=temp;
}
FILE *file = fopen("10.txt", "a+");
for(i=0;i<MAX;i++)
{
if(bigline[i]!=0&&bigline[i]!=bigline[i+1])
fprintf (file, "%d\n",bigline[i]);
}
fclose (file);
printf("\a");
system("pause");
return 0;
}
/////////////////////
int randomnumber()
{
for(;;)
{
onenum=rand()%10;
if(onenum!=0)
break;
}
return onenum;
}
/////////////////////////////////
void add1()
{
a1=number[0]+number[1];
}
void subtraction1()
{
a1=number[0]-number[1];
}
void multiplication1()
{
a1=number[0]*number[1];
}
void division1()
{
a1=(double)number[0]/number[1];
}
//////////////////////////////////////
void add2()
{
a2=a1+number[2];
}
void subtraction2()
{
a2=a1-number[2];
}
void subtraction21()
{
a2=number[2]-a1;
}
void multiplication2()
{
a2=a1*number[2];
}
void division2()
{
a2=(double)a1/number[2];
}
void division21()
{
a2=(double)number[2]/a1;
}
/////////////////////////////////////////
void add3()
{
a3=a2+number[3];
}
void subtraction3()
{
a3=a2-number[3];
}
void subtraction31()
{
a3=number[3]-a2;
}
void multiplication3()
{
a3=a2*number[3];
}
void division3()
{
a3=(double)a2/number[3];
}
void division31()
{
a3=(double)number[3]/a2;
}
///////////////////////////////////////////
void randomform1()
{
j=rand()%4;
switch(j)
{
case 0:
add1();
break;
case 1:
subtraction1();
break;
case 2:
multiplication1();
break;
case 3:
division1();
break;
}
}
//////////////////////////////////////////
void randomform2()
{
j=rand()%6;
switch(j)
{
case 0:
add2();
break;
case 1:
subtraction2();
break;
case 2:
subtraction21();
break;
case 3:
multiplication2();
break;
case 4:
division2();
break;
case 5:
division21();
break;
}
}
////////////////////////////////////////
void randomform3()
{
j=rand()%6;
switch(j)
{
case 0:
add3();
break;
case 1:
subtraction3();
break;
case 2:
subtraction31();
break;
case 3:
multiplication3();
break;
case 4:
division3();
break;
case 5:
division31();
break;
}
}
void line()
{
for(i=0;i<3;i++)
{
least=i;
for(j=i+1;j<4;j++)
if(number[j]<number[least])
least=j;
temp = number[i];
number[i]=number[least];
number[least]=temp;
}
}
void makenumber()
{
for(i=0;i<4;i++)
{
number[i]=randomnumber();
}
for(;;)
{
if(number[0]==number[1]||number[0]==number[2]||number[0]==number[3]||number[1]==number[2]||number[1]==number[3]||number[2]==number[3])
{
for(i=0;i<4;i++)
{
number[i]=randomnumber();
}
}
else
break;
}
}