2021. 5. 17. 22:33, 어플리케이션/C++
728x90
문제 15596.
정수 n개가 주어졌을 때, n개의 합을 구하는 함수를 작성하시오.
#include <vector>
long long sum(std::vector<int> &a) {
long long ans = 0;
for (size_t i = 0; i < a.size(); i++)
{
ans += a[i];
}
return ans;
}
tip :
size_t는 이론상 가장 큰 사이즈를 담을 수 있는 unsigned data type이다.
이때 정수의 개념이 int로 쓰이는 것은 아님을 알 필요가 있다.
혼용하다가 오버플로우가 일어날 수 있으니 주의.
ex)
32bit머신에서의 unsigned long long 정수형
64bit머신에서의 unsigned long long 정수형
128bit 머신에서의 unsigned long long 정수형
문제 4673.
10000보다 작거나 같은 셀프 넘버를 한 줄에 하나씩 출력하는 프로그램을 작성하시오.
#include <iostream>
using namespace std;
int selfnum(int num)
{
int sum = num;
while (1)
{
if (num == 0) // 줄일 숫자가 남아있지 않다면
break; // 탈출하세요.
sum += num % 10; // 1의 자리 숫자로 sum 값 갱신
num /= 10; // 자리값 하나씩 줄여나가기.
}
return sum;
}
int main()
{
cin.tie(0);
ios::sync_with_stdio(0); // 빨리 돌라고
bool arr[10001] = {0, }; // 참 거짓 판단용. default는 false로 해놓기.
for (int i = 1; i <= 10000; i++)
{
int index = selfnum(i); // 1부터 10000사이 index 값이 존재하다면
if (index <= 10000)
arr[index] = true; // 참값으로 갈아치우기.
}
for (int i = 1; i <= 10000; i++)
{
if (arr[i] != true)
cout << i << "\n"; // 거짓값들 출력
}
}
자릿수 값을 끌어내는 방법은 반드시 숙지해두자.
배열의 위치와 값을 매칭하기 위해 배열자리를 하나 더 마련해두는 방법도 있다.
문제 1065.
어떤 양의 정수 X의 각 자리가 등차수열을 이룬다면, 그 수를 한수라고 한다. 등차수열은 연속된 두 개의 수의 차이가 일정한 수열을 말한다. N이 주어졌을 때, 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력하는 프로그램을 작성하시오.
#include <iostream>
using namespace std;
bool hansu(int);
int main()
{
cin.tie(0);
ios::sync_with_stdio(0); // 빨리 돌도록
int a = 0, n; // 카운터, 기준 숫자.
cin >> n;
for (int i = 1; i <= n; i++)
if (hansu(i) == 1) a++;
cout << a << "\n"; // 총 한수의 개수
return 0;
}
bool hansu(int n)
{
if (n < 100) return 1; // 등차수열은 세 자리 이상일 때 푸는 데 조건이 걸린다
int hu, te, on; // 백의자리 십의자리 일의자리
hu = n / 100; te = n / 10 % 10; on = n % 10;
if (hu - te == te - on) return 1; //등차수열을 만족한다면 1리턴
return 0;
}
728x90
'어플리케이션 > C++' 카테고리의 다른 글
백준 1차원 배열 모음집 (0) | 2021.05.12 |
---|---|
백준 while 문제 모음집 (0) | 2021.05.08 |
백준 for 문제 모음집 (0) | 2021.05.03 |
Comments, Trackbacks