삽질은 나의 힘 | 'Algorithm' 카테고리의 글 목록
삽질은 나의 힘 위치로그  |  태그  |  미디어로그  |  방명록
icon Algorithm 에 해당하는 글1 개
2009.03.11   s사이트 1번문제


icon s사이트 1번문제
Algorithm | 2009. 3. 11. 15:50

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
sim1.c
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
///////////////////////////////////////////////////////////////////////////////
//   1 ~ 1000까지의 합을 구할 때 (1+1000),(2+999)...반복되는       
//          합을 500 번 더하는 기본 틀에 적용했다.                          
//                   
//   x-(x%5) ==>    x미만의  5의 배수중 가장 큰 수를 나타낸다.     
//         x미만이므로 그전에 argv[1]-1해준다.            
//                   
//         ((x-(x%5))/5)%2==0  ==> 2로 나눠떨어지면 중간값이    
//          존재하지 않으므로 중간값을 더해줄      
//          필요가 없다.       
//
//       ex) 1-1001 의 합의 경우 ...,(500,502), (501)     <--중간값       
//
//      중간값이 있는 경우 소수점은 버려지고 중간값을 더해주고              
//      중간값이 없는 경우 짝수이므로 딱 떨어진다.                          
//
//    ex) 5 995                
//       10 990                
//       15 985                
//         .                   
//         .                
//        500 (중간값)   짝의 개수   짝의 합  중간값          
//                           99     *  1000   +   500    = 99500            
//                      
//  15의 배수는 3의 배수와 5의배수에서 두번 더해지므로 빼준다.          
//                   
//                                                                                          minSoong-e  
///////////////////////////////////////////////////////////////////////////////

#include<stdio.h>
#include<stdlib.h>

void main(int argc,char *argv[])
{
 int sum=0,x=0;
 
 x=atoi(argv[1])-1;                                // x미만이므로 -1해준다.

////////////////// 5의배수인경우의 합///////////////////////////////////////////////
 if(((x-(x%5))/5)%2==0)                           
 {             
  sum+=(((x-(x%5))/5)/2) * ((x-(x%5))+5);
 }
 else
 {
  sum+=(((x-(x%5))/5)/2) * ((x-(x%5))+5)  +  ((x-(x%5)+5)/2);   //중간값을 더해준다.
 }

////////////////// 3의배수인경우의 합///////////////////////////////////////////////
 if(((x-(x%3))/3)%2==0)
 {
  sum+=(((x-(x%3))/3)/2) * ((x-(x%3))+3);
 }
 
 else
 {
  sum+=(((x-(x%3))/3)/2) * ((x-(x%3))+3)  +  ((x-(x%3)+3)/2);
 }
////////////////// 15의배수인경우///////////////////////////////////////////////
 if(((x-(x%15))/15)%2==0)
 {
  sum-=(((x-(x%15))/15)/2) * ((x-(x%15))+15);
 }
 
 else
 {
  sum-=(((x-(x%15))/15)/2) * ((x-(x%15))+15)  +  ((x-(x%15)+15)/2);
 }

 printf("%d\n",sum);   //출력

}


++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
정답 검사용 소스       sim1_1.c
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#include<stdio.h>
#include<stdlib.h>

void main(int argc,char *argv[])
{
          int i,sum=0;
 
          for(i=1;i<(atoi(argv[1]));i++)
          {
                    if (i%3==0 || i%5==0)
                     sum+=i;
          }
         
          printf("%d\n",sum);
}
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
output
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++




arrow 트랙백 | 댓글



[PREV] [1] [NEXT]
관리자  |   글쓰기
BLOG main image
분류 전체보기 (27)
Server (4)
Network (3)
Packet Analysis (3)
Security (3)
TroubleShooting (8)
Algorithm (1)
ETC (2)
None (1)
Total :
Today :
Yesterday :
rss
위치로그 : 태그 : 방명록 : 관리자
minSoong-e's Blog is powered by Daum / Designed by plyfly.net