[伯俊C+]20164奇数独石
質問する
偶数と奇数では、浩錫は頭文字が同じ奇数が好きだ.車を運転しているホソクは、前の車のナンバープレートが単数でいっぱいになったとき、かわいいと思った.電話番号も単数しかないと思います.こうして奇数に迷い込んだ浩錫は、一連の数N演算を通じて、出現した数字の中でできるだけ多くの奇数を見たいと思っている.
1つの数を指定すると、スズは1回の演算で以下のステップを経ます.
数字の各桁数に奇数を紙に書く.
一桁数えたら、何もできずに終わります.
2桁まで数えると、2つに分けて和を求め、新しい数とします.
3桁以上になると、任意の位置から切り離して3つの数に分け、3つの数を加算した値を新しい数とします.
胡石は演算が終わった瞬間、紙の数字を合わせた.こうして最終的に得られる数を最終値と呼びましょう.例えば、最初の数は82019です.では、以下のように分割すると5個の奇数が見られるため、最終値は5となる.
最初はスズが自分が持っている数がNだと言ったとき、創造できる最終値の中で最高値と最低値を見つけた.
入力
最初の行は号石が最初に持っていた数Nを与えた.
しゅつりょく
最初の行では、号石が生成できる最終値の最上位値と最上位値を順番にスペースで区切って出力します.
https://www.acmicpc.net/problem/20164
に答える
さいきこうぞう
例えば、あるベクトルのアドレスを取得し、そのベクトルに格納する.
ハサミで切ると、いつか1桁になります.
では、このときコードを書き、問題の条件を終わらせます.
数値と文字列を計算する必要があるため、必要に応じて変換プロセスを関数に設定できます.
#define _CRT_SECURE_NO_WARNINGS
#include <bits/stdc++.h>
int N, max=0, min=0x7fffffff;
int findOddCnt(char* c, int size) {
int odd = 0;
for (int i = 0; i < size; i++)
if ((c[i] - '0') % 2 != 0) odd++;
return odd;
}
//최솟값을 구함
void func(int n, int cnt) {
int size = 1, _ = n, n2, odd = 0;
while (_ / 10 != 0) { //자릿수구하기
size++;
_ /= 10;
}
char c[10];
sprintf(c, "%d", n); //문자열로 변환
//1단계 : 각자리 숫자중 홀수 갯수를 저장
odd += findOddCnt(c, size);
//2단계 : 한자리면 종료 : 유일한 종료조건.
//이곳에서 모든 최대 최소 연산이 이루어짐
if (size == 1) {
if (max < cnt + odd) max = cnt + odd;
if (min > cnt + odd) min = cnt + odd;
return;
}
//3단계 : 두자리면
if (size == 2)
func((c[0] - '0') + (c[1] - '0'), cnt + odd);
//4단계 세자리이상이면
if (size >= 3) {
for (int i = 1; i < size - 1; i++) {
for (int j = i + 1; j < size; j++) {
int s1=0, s2=0, s3=0;
char c1[10] = {'\0',}, c2[10] = { '\0', }, c3[10] = { '\0', };
//3등분으로 자름
for (int k = 0; k < i; k++) {
c1[s1] = c[k];
s1++;
}
for (int k = i; k < j; k++) {
c2[s2] = c[k];
s2++;
}
for (int k = j; k < size; k++) {
c3[s3] = c[k];
s3++;
}
//정수로 변환
n2 = atoi(c1) + atoi(c2) + atoi(c3);
func(n2, cnt + odd);
}
}
}
}
int main(void) {
scanf("%d", &N);
func(N, 0);
printf("%d %d", min, max);
return 0;
}
Reference
この問題について([伯俊C+]20164奇数独石), 我々は、より多くの情報をここで見つけました https://velog.io/@cldhfleks2/20164テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol