C언어:2일차 (1차원 배열~

8958번

#include <stdio.h>
int main() {
	int num;
	scanf("%d", &num);
	//how many repeat
	for (int i = 0; i < num; i++) {
		char a[80];
		scanf("%s",&a);
		//문자열을 받았지만 문자열의 사이즈가 80이라서 어떻게 for문을 돌려야될지 모르겠다.
        //검색을 통해 알아냄. -> strlen을 쓰면 해결된다.
	}

	return 0;
}

strlen : 문자열의 길이를 구할 수 있는 함수. strlen를 사용하려면 string.h가 필요하다.

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

int main() {
	int num, sum = 1;
	int result;

	scanf("%d", &num);
	//얼마나 반복할지.
	for (int i = 0; i < num; i++) {
		char a[80];
		scanf("%s",&a);
		for (int i = 0; i < strlen(a); i++) {
			if (a[i] == "o") {
				sum += 1;
				result += sum;
			}
			if (a[i] == "x") {
				sum = 1;
			}
		}
		printf("%d", result);
	}

	return 0;
}

컴파일 에러... 어디서 에러가 뜨는지 못찾겠다 꾀꼬리...

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

int main() {
	int num, sum, result;
	char a[80];
	scanf("%d", &num);
	
	for (int i = 0; i < num; i++) {
		sum = 1;
		result = 0; //3번째 이상의 줄이 입력될 때 초기화되도록 sum과 result를 for문 안으로 넣어줬다.
		scanf("%s",a);		
		for (int j = 0; j < strlen(a); j++) {
			if (a[j] == 'O') {   //ㅎㅎ...이것때문에 30분은 쓴것같다. 문자열일 때는 "", 문자일때는 ''를 쓴다... 지금은 문자이니까 홑따옴표를 써야한다. ^^
				result += sum;
				sum++;
			}
			if (a[j] == 'X')sum = 1;
		}
		printf("%d\n", result);
	}

	return 0;
}

4344번

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

int main() {
	double num, student, sum=0;
	double score[1001];
	double pro=0,avg;

	scanf("%lf", &num);
	for (int i = 0; i < num; i++) {
	scanf("%lf", &student);
		for (int i = 0; i < student; i++) {
			scanf("%lf", &score[i]);
			pro += score[i];
		} //합산 계산
		avg = pro / student;
		for (int i = 0; i < student; i++) {
			if (score[i] > avg) sum += 1;
		}
		printf("%.3lf%%", sum / student * 100);
	}

	return 0;
}

틀렸습니다.가 떴다. 어디서 틀렸을까 하고 pro student avg의 값을 확인하기 위해 중간에 프린트문을 넣어보았다.

보면 합산값이 이상하다는 것을 느낄 수 있었다. 반이 달라질때마다 초기화 되어야되는데 계속 이월하고 있었다.

scanf를 통해 값을 받는 student & num을 제외하고 다른것들은 반복문안에서 초기화시켰다.

**유의할 점: %을 나타내고 싶다면 %%을 써야한다.

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

int main() {
	double num, student, sum;
	double score[1001];
	double pro,avg;

	scanf("%lf", &num);
	for (int i = 0; i < num; i++) {
		pro = 0;
		avg = 0;
		sum = 0;
		scanf("%lf", &student);
		for (int i = 0; i < student; i++) {
			scanf("%lf", &score[i]);
			pro += score[i];
		} //합산 계산
		avg = pro / student;
		for (int i = 0; i < student; i++) {
			if (score[i] > avg) sum += 1;
		}
		printf("%.3lf%%\n", sum / student * 100);
	}

	return 0;
}

4673번
셀프넘버 구하기...
숫자를 문자로 변경후 다시 숫자로 변경해서 넣고 싶은데 잘 안된다.. 어떻게 해야되남.. ㅠ

파이썬에서 푸는 방식과는 다르다. 오직 수학으로만!!!! 아예 이 문제를 몰랐다면 할 수 있었을까.

#include <stdio.h>

int nonselfnum(int n);

int main() {
	int arr[10001] = { 0, };
	for (int i = 1; i < 10001; i++) {
		int tep = nonselfnum(i);
		if (tep<10001) arr[tep] = 1;
	}
	for (int i = 1; i < 10001; i++) {
		if (!arr[i]) {		// arr[i]가 존재하지 않으면 조건을 만족하게 된다.
			printf("%d\n", i);
		}
	}

}

int nonselfnum(int n) {
	int sum = n;
	while (n!=0){		//123이 들어오게 되면 
		sum += n % 10;  // 123인 sum에 10으로 나눈 나머지 3이 들어간다.
		n /= 10;		// 이후 n은 10으로 나눈 몫 12가 되어 다시 들어간다.
	}					// 한자리수가 된 n은 /=에서 0이 되어 while문을 탈출하게 된다.
	return sum;
}

이때 런타임에러가 떴는데 그 이유는 반복문이 제대로 종료되지 않았기 때문이다. tep가 10000을 넘는 경우까지 고려하게 되어 그렇다.
중간에 if문을 이용해 범위를 제한했다.

좋은 웹페이지 즐겨찾기