|
김도달 님이 쓰신 글 :
: 컴퓨공학과 학생들 n명이 소풍을 가서 원모양으로 둘러 앉아 게임을 하려고합니다.
:
: 학생번호는 0번부터 n-1번까지이다.0번학생부터 숫자1부터 차례대로 부르면서 소수가 걸린학생은
:
: 박수를 치는방법이다. 학생의 수와 마지막에 부른수가 주어졌을때 특정 번호의 학생이 박수를 몇번쳤는지 알아보는 프로그램을작성해야됩니다.
:
: 5명의 학생들이 소수놀이를 하는경우 마지막으로 불린 수가 17이라면 1번학생은 몇번박수를 쳤을까를 알고싶을때 입력 예)5 17 1
:
: <입력조건>
:
: 학생수 n은 최소 2명 최대 1000명
:
: 부를수 있는 수 su의 범위는 1이상 n*n이하
:
: 학생의 번호 no는 0이상 n미만
:
: <입력 및 출력의 예>
:
: 5 17 1
:
: 1번 학생은 3번 박수를 쳤다
:
:
:
: 이문제좀 작성해주세요 도와주세요
:
: 추가로 알고리즘도 글로 표현해주시면 감사하겠습니다..ㅠ.ㅠ
:
#include <stdio.h>
#include <vector>
bool checkNum(int num)
{
if (num <= 1)
return false;
for (int i = 2; i <= num >> 1; ++i)
{
if (num % i == 0)
return false;
}
return true;
}
int main(int argc, char** argv)
{
int nStudents, lastNumber, studentNumber;
nStudents = 5;
lastNumber = 17;
studentNumber = 1;
std::vector<int>arrStudent(nStudents);
for (int n = 1; n <= lastNumber; ++n)
{
int sn = (n - 1) % nStudents;
if (checkNum(n))
++arrStudent[sn];
}
printf("student[%d] = %d\n", studentNumber, arrStudent[studentNumber]);
return 0;
}
소수의 조건은 수학적으로 약수가 2개인 것을 만족하면 되는 간단한 정의이므로 설명은 생략.
|