軍隊での符号化アルゴリズム1
11373 ワード
生意気な時に1週間連続...?すべて前回掲載した記事のように、インフラで料金講座を購入して勉強し、1日1題を解くことを目標にしています.今は基本的なものなので、単独で整理したりアップロードしたりしていませんが、今日は問題を解くときに背中を刺されたような気がします...記事をアップロード...
まず、今日私が解決しなければならない問題は、数字が混ざった文字列を入力すると、数字だけを区別し、数字を合わせて数字の約数を求めることです.
たとえば
t 0 e 0 a 1 c 2 herから数字を抽出すると,0,1,2である.この場合一番前の0を除くので12です.
第2の例では、rgf 0 gqE 5 F 40 dgsから、0、5、4、0という数字が抽出される.このとき、先頭の0の他に540があります.
まずは私が編んだハーモニー
問題解きの授業を見て「本当にバカだ...」私はそう思います.
コードはできるだけ簡潔で明確に...
まず、今日私が解決しなければならない問題は、数字が混ざった文字列を入力すると、数字だけを区別し、数字を合わせて数字の約数を求めることです.
たとえば
t 0 e 0 a 1 c 2 herから数字を抽出すると,0,1,2である.この場合一番前の0を除くので12です.
第2の例では、rgf 0 gqE 5 F 40 dgsから、0、5、4、0という数字が抽出される.このとき、先頭の0の他に540があります.
まずは私が編んだハーモニー
#include<stdio.h>
#include<iostream>
#include <string.h>
#include<cmath>
using namespace std;
int main(){
char mix[51]={0,};
int num[11] ={0,}, cnt=0;
scanf("%s", &mix);
int len = strlen(mix);
for(int i =0; i<len; i++){
if(mix[i]<65){
num[cnt] = mix[i] -'0';
cnt++;
}
}
int check = cnt;
int fin=0;
for(int i =0; i<cnt; i++){
if(num[i]!=0){
fin = fin + pow(10, check-1)*num[i];
check = check -1 ;
}
else{
check = check -1 ;
}
}
int div_cnt=0;
for(int i =1; i<=fin; i++){
if(fin%i==0){
div_cnt++;
}
}
cout<<fin<<endl;
cout<<div_cnt;
}
汚く見えます.砲口も何度もあり、特に数字を抽出して1つの数字に再結合する過程で、面倒な方法を選んだ.問題解きの授業を見て「本当にバカだ...」私はそう思います.
for(int i =0; i<cnt; i++){
if(num[i]!=0){
fin = fin + pow(10, check-1)*num[i];
check = check -1 ;
}
else{
check = check -1 ;
}
}
上のコードのように、砲口が一番前に0でないときだけpow関数を使って数字を組み合わせる方法を選択しますが、for(i=0; a[i]!='\0'; i++){
if(a[i]>=48 && a[i]<=57){
res=res*10+(a[i]-48);
}
}
このようにAskyコード値を一度に設定することで,数値が0であるか否かを区別する必要がなく,10を乗じ続けるだけでこの問題をうまく解決できる.コードはできるだけ簡潔で明確に...
Reference
この問題について(軍隊での符号化アルゴリズム1), 我々は、より多くの情報をここで見つけました https://velog.io/@shintaewon/군대에서코딩하기알고리즘1テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol