c언어 몇일 째 잡고 있는데 한 번만 도와주세요 ㅠㅠ

#include <stdio.h>
#include <string.h>
#pragma warning(disable : 4996)

int inputArray(int arr[], int N);
int sortArray(int arr[], int N);
void printArray(int arr[], int N);
int getNumContinuousNumbers(int arr[], int N);

struct a {
    int temp;
    int number;
};

int main()
{
    int N, arr[50], i;
    scanf("%d", &N);

    inputArray(arr, N);
    sortArray(arr, N);
    printArray(arr, N);

    printf("%d", getNumContinuousNumbers(arr, N));

    return 0;
}

int inputArray(int arr[], int N) {

    int i;

    for (i = 0; i < N; i++) {

        scanf("%d", &arr[i]);
    }

    return arr[50];
}

int sortArray(int arr[], int N) {

    int i = 0;
    int j;
    int temp;

    for (i = 0; i < N; i++) {
        for (j = 0; j < N - i - 1; j++) {
            if (arr[j] > arr[j + 1]) {
                temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
            }
        }
    }
    return arr[50];
}

void printArray(int arr[], int N) {
    int i = 0;

    for (i = 0; i < N; i++) {
        printf("%d ", arr[i]);
    }

    printf("\n");
}


int getNumContinuousNumbers(int arr[], int N) {

    int i;
    int j;
    int answer;
    int count = 0;
    int temp = 0;

    for (i = 1; i < N; i++) {

        if (arr[i - 1] + 1 == arr[i]) count++;
        
        else {
            if (temp < count) {
                temp = count;
                answer = arr[i - 1];

                count = 0;
            }

            else {
                count = 0;
            }
        }
    }

    return answer;
}

n개의 숫자를 입력 받아 차례대로 정렬하고 연속된 횟수가 많은 수를 출력하는 코드를 짜고 있습니다!
예를 들어 n=6, 1 2 3 5 7 8 이렇게 되있으면 123, 78 이니 3이 출력이 되는 건데요, 연속된 세트가 두개만 있을 때는 잘 되는데 3번째 세트 부터는 연속 횟수가 제대로 세어지지 않아서 고민입니다… 어디가 문제인지 모르겠어요 ㅠㅠㅠㅠ

예시>
n=10
1 2 4 5 6 8 9 10 11 12 이런 식이면 12가 출력되야하는데 456 의 6만 출력됩니다 ㅠㅠ

제발 도와주세요 … 3일 째 고민했습니다 정말로!!!ㅠㅠㅠ

1 Like
#include <stdio.h>
#include <string.h>

int main() {
	int arr[10] = { 1,2,4,5,6,8,9,10,11,12 };
	int check[10];

	for (int i = 0; i < 10; ++i) check[i] = 1;

	for (int i = 1; i < 10; ++i) {
		if (arr[i - 1] + 1 == arr[i]) 
			check[i] = check[i - 1] + 1;
	}

	for (int i = 0; i < 10; ++i) {
		printf("%d ", check[i]);
	}

	printf("\n\n");

	int max = 0, max_index;

	for (int i = 0; i < 10; ++i) {
		if (check[i] > max) {
			max = check[i];
			max_index = i;
		}
	}

	printf("최대 연속 횟수: %d, 위치: %d", max, check[max_index]);
}

전 이렇게 짜봤어용

이터레이션 한번으로 충분!

#include <iostream>
#include <vector>

namespace {
using namespace std;
}  // unnamed namespace;


int main(int argc, char** argv) {
  vector<int> numbers({1, 2, 4, 5, 6, 8, 9, 10, 11, 12});

  int max_count = 1, now_count = 1;
  int max_index = 0, now_index = 0;
  for (size_t i = 1; i < numbers.size(); ++i) {
    if ((numbers[i - 1] + 1) == numbers[i]) {
      if (max_count < ++now_count) {
        max_count = now_count;
        max_index = now_index;
      }
    } else {
      now_count = 1;
      now_index = i;
    }
  }

  while (max_count--) cout << numbers[max_index++] << "\n "[max_count > 0];

  return 0;
}
    if ((numbers[i - 1] + 1) != numbers[i]) {
      now_count = 1;
      now_index = i;
    } else if (max_count < ++now_count) {
      max_count = now_count;
      max_index = now_index;
    }

취향 차이일 수도 있겠지만 그냥 강박, , ,

2 Likes