2012-03-29 2 views
1

배열이 있고 배열에 정수가 있습니다. 배열의 정수가 반복되는 횟수를 계산하려고합니다. 그 후에 퍼센트를 인쇄하고 싶습니다. 이것은 내가 지금까지 가지고있는 것이다. 내가 얻을 출력을 위해 정수가 자신과 동일한 횟수를 계산 한 다음 백분율을 계산합니다.

for(i = 2; i < 8; i++){ 
    mmblk[i] = (num[i]/bsize); //mmblk[i] =0,0,1,9,0,1 
    if(mmblk[i] == mmblk[i]){  
     count ++; 
     p = count/num[0]; 
     percent = (p * 100); 
    } 
} 
printf("Highest possible hit rate = %d/%d = %d %\n", count, num[0], percent);//num[0]=6 

: 아주 높은 적중률 = 0/6 = 0

출력은 같아야합니다

: 아주 높은 적중률 = 3/6 = 50 %

뭔가 잘못된 길이 있다는 것을 알고 있지만 그것이 무엇인지 알 수는 없습니다. 어떤 도움이라도 대단히 감사하겠습니다.

+0

무엇이 num [i]입니까? 왜 2에서 8로 반복할까요? mmblk 배열의 크기는 얼마입니까? – Jeeva

+7

'if (mmblk [i] == mmblk [i]) {'오 마이 오 오 마이 오 – iehrlich

+0

@Jeeva num [i]는 텍스트 파일에서 오는 줄의 문자를 가진 또 다른 배열입니다. 이 파일은 파일에서 사용하고 싶은 유일한 행이기 때문에 2에서 시작하여 8로 이동합니다. mmblk의 크기는 32입니다. – oldbutnew

답변

0

그래서 올바르게 이해하면 배열에서 반복되는 값의 최대 개수를 찾고 있습니다.

func({1,2,3}) = 0 
func({1,1,3}) = 2 
func({1,1,1}) = 3 

당신은 단순히 배열의 길이에 의해 이러한 결과를 나눈 백분율을 얻으려면.

문제는 기능이 너무 단순하고 전혀 해결책이 아니라는 것입니다.

첫 번째 접근 방식에서 나올 솔루션은 counts라는 또 다른 배열을 갖는 것입니다. 소스 배열과 길이가 같습니다. 결국 소스 배열의 각 숫자가 나타나는 횟수가됩니다.

소스 배열의 각 항목에 대해 해당 숫자가 나타나는 횟수를 세고 그 결과를 개수로 저장합니다. 그런 다음 counts 배열의 최대 값을 찾고 a) 찾고있는 최대 반복 값과 b) 소스 배열에서 상응하는 최대 반복 값의 인덱스를가집니다. 예 {0,0,1,9,0,1}의 경우

:

이에 최적화
src counts 
    0  3  Max 
    0  3 
    1  2 
    9  1 
    0  3 
    1  2 

하나, 당신이 계산하는 동안, 당신은 배열에 같은 수의 이전에 발생하는 경우, 당신은 이미 그 값을 반복 계산했기 때문에 멈출 수 있습니다. 장소에두고

, 당신의 결과는 다음과 같습니다

src counts 
    0  3  Max 
    0  0   
    1  2 
    9  1 
    0  0 
    1  0 

또 다른 최적화는 배열의 현재 인덱스에서 계산 시작하는 것입니다. 이것은 다른 최적화와 같은 이유로 작동합니다.

결과 :

src counts 
    0  3  Max 
    0  2 
    1  2 
    9  1 
    0  1 
    1  1 
+0

소스 배열의 숫자가 변경되면 여전히 작동할까요? – oldbutnew

+1

네, 그렇죠? 어떤 코드를 포기하지 않고 코드가 작동되기를 바랄뿐 아니라 코드가 무엇인지 이해해야한다고 생각하기 때문에 어떤 코드도 제공하지 않았습니다. 이것이 우리가 Windows와 같은 소프트웨어로 끝내는 방법입니다. –

+0

권. 나는 단지 점검하고 있었다. 숫자가 더 일찍 변할 것이라고 언급하지 않았습니다. 나는 2003 년부터 코드를 작성하지 않았다. 나는 질문이있다. 숫자를 유지하려고 시도하는 숫자가 무엇인지 모르는 경우 어떻게 비교합니까? – oldbutnew

0

만 작은 정수가있을 경우 큰 정수가 발생하는 경우에는 정수

const int MAX_INT = 1024; 
const int FIRST = 2; 
const int LAST = 7; 

unsigned int count[MAX_INT]; 
int i; 

for (i = 0; i < MAX_INT; i++) 
    count[i] = 0; 

for (i = FIRST; i <= LAST; i++) { 
    if (numbers[i] >= MAX_INT) { 
     fprintf(stderr, "Too large number"); 
     exit 1; 
    } 
    count[numbers[i]] += 1; 
} 

for (i = 0; i < MAX_INT; i++) 
    if (count[i] > 0) 
     // print your statistics 

의 발행 수의 수를 계산하는, 당신이 당신의 배열 count 큰 만들 수 없을 정도로 큰 배열을 사용할 수 있습니다 당신은 내가 생각하는 것보다 더 정교한 것을 필요로한다. 번호를 먼저 정렬하는 것이 옵션 일 수 있습니다.

0

난 링크 된 목록 또는 각 데이터 노드는 수와 얼마나 많은 시간이 발생하기 저장 다른 가변 길이 컨테이너를 추천 할 것입니다.

의사 코드

:

VariableLengthContainer의 V = EMPTY-CONTAINER N = 크기 (입력) 입력 그 번호가 컨테이너 인 경우에, 각 번호 는 달리 그 카운트 를 증가하는 번호를 추가 컨테이너 수를 1로 설정하십시오.

관련 문제