게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
저번에 올라온 서로다른 4가지수로 10만들기 씨언어로 해봤어요
게시물ID : science_28597짧은주소 복사하기
작성자 : 그런것이지
추천 : 1
조회수 : 576회
댓글수 : 3개
등록시간 : 2013/12/19 21:17:32
베오베 돌아다니다가 두달전에 작성한 글을 보았는데요 (이 글이 과게였으니깐 과게)
0을 제외한 서로 다른 4개의 수를 사칙연산만을 이용해서 10을 만들 수 있는지 증명해달라시는 글이었어요  밑에 링크
http://www.todayhumor.co.kr/board/view.php?table=bestofbest&no=130855&s_no=130855&kind=search&search_table_name=bestofbest&page=1&keyfield=subject&keyword
제가 요즘 씨언어를 막 배우기 시작해서 어? 이거한번 씨언어로 해보자 싶어서 한참을 끙끙거리다가 만들었네요 ㅋㅋ
실행시키면 랜덤으로 수를 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;
  }
}
전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호