1부터 10,000까지 8이라는 숫자가 총 몇번 나오는가?
8이 포함되어 있는 숫자의 갯수를 카운팅 하는 것이 아니라 8이라는 숫자를 모두 카운팅 해야 한다.
(※(注記) 예를들어 8808은 3, 8888은 4로 카운팅 해야 함)
int main()
{
int i,j,n,m;
int sum;
sum = 0;
for (i=0; i<10; i++){
for(j=0; j<10; j++){
for (n=0; n<10; n++){
for(m=0; m<10; m++){
if( m == 8 ){sum = sum+1;}
if( n == 8){sum = sum+1;}
if ( j == 8){sum = sum+1;}
if( i == 8 ){sum = sum+1;}
}
}
}
}
printf("1~10000까지 8을 가진 숫자의 갯수는 %d 이다.\n",sum);
}
이제 C 공부하기 시작한 초보입니다. 배운 범위에서는 이렇게 하면 되네요.
2015年12月07日 17:59
C 코드입니다.
#include <stdio.h>
int main()
{
int i;
int count[4] = {1};
int v = 9;
int sum = 1;
for (i = 1; i < 4; i++) {
count[i] = v + count[i - 1] * 10;
v *= 10;
sum += count[i];
}
printf("count of 8 from 1 to 10,000: %d\n", sum);
return 0;
}
루푸 없이 입력한 숫자까지 갯 수 구하는 프로그램 입니다.
#include "stdafx.h"
#include <math.h>
int Get8Count(int nValue)
{
int nCount = 0;
int nDigit = log10((double)nValue);
if(nDigit ==0 || nValue ==0)
return nValue >=8;
int nLast = ((int)(nValue/pow(10.,nDigit))) ;
nCount += nDigit * pow(10.,(nDigit-1)) *nLast;
if(nLast == 8)
nCount++;
return nCount+Get8Count(nValue%(int)(pow(10.,nDigit)));
}
int _tmain(int argc, _TCHAR* argv[])
{
while(1)
{
printf("?");
int nMax = 0;
int nCount = 0;
scanf("%d",&nMax);
printf("\n%d\n",Get8Count(nMax));
}
return 0;
}
c입니다. 숫자 8을 어떻게 세지 고민하다가 char형으로 바꾼다음에 세는 방법을 썼는데... 다른 분들의 풀이를 보고 나서야 %를 사용하면 된다는 사실을 깨달았네요ᅮᅮ
#include <stdio.h>
#include <stdlib.h>
#define MAX 10000
int main()
{
int number=0, i, j=0, k;
int count=0;
char buffer[10]={0,};
for(i=0;i<MAX;i++)
{
number++;
itoa(number,buffer,10);
while(buffer[j])
{
if(buffer[j]=='8')
{count++;}
j++;
}
for(k=0;buffer[k];k++)
{
buffer[k]='0円';
}
j=0;
}
printf("1부터 %d까지 8의 개수는 %d개입니다.\n", MAX, count);
return 0;
}
#include <stdio.h>
int main(void)
{
int i , j , k , l;
int n=0;
for( i = 0 ; i <=9 ; i++)
{
for( j = 0; j <= 9 ; j++)
{
for( k = 0 ; k <= 9 ; k++)
{
for( l = 0 ; l <= 9 ; l++)
{
if( i == 8 )
n++;
if(j==8)
n++;
if(k==8)
n++;
if(l==8)
n++;
}
}
}
}
printf("%d\n",n);
return 0;
}
다른 분들 대단하시네요.. 얼릉 C를 끝내고 다른 언어 공부해야할듯
#include <iostream>
using namespace std;
int main(){
int count = 0;
int bcd[4] = { 0 };
int num;
for (int i = 1; i < 10000; i++)
{
num = i;
for (int j = 3; j >= 0; j--)
{
bcd[j] = num % 10;
num /= 10;
}
if (bcd[0] == 8)
count++;
if (bcd[1] == 8)
count++;
if (bcd[2] == 8)
count++;
if (bcd[3] == 8)
count++;
}
cout << "8이 나온 횟수 : " << count << endl;
return 0;
}
이렇게 짜봤습니다... 어떤가요?? 제가 생각한 방법은 예를들어 124라는 숫자를 bcd코드로 변환해서 0, 1, 2, 4로 만듭니다 그리고 각 자리의 숫자가 8이면 count를 하나 증가시키는 방법입니다
2015年04月28日 01:48
{```{.cpp}
#include<iostream>
using namespace std;
int eight(int n);
int count;
int main() {
for(int i = 0; i < 10001; i++) {
eight(i);
}
cout << "8의 개수: " << count << endl;
return 0;
}
int eight(int n)
{
if(n%10 == 8)
count++;
if(n > 10)
eight(n/10);
return count;
} ```
2015年05月29日 11:25
풀이 작성