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문을 이용해 범위를 제한했다.
Author And Source
이 문제에 관하여(C언어:2일차 (1차원 배열~), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@2mini/C언어2일차-문자열저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)