#include <stdio.h>
int main(){
int n,copy,counter=0,prevcounter,prev;
scanf("%d",&n);
while(n>0){
counter = 0;
n--;
copy = n;
while(copy>0){
--copy;
if(n%copy==0){
counter++;}
if(copy==0)break;
}
if(counter>prevcounter){
prevcounter = counter;
prev = n;
}
}
printf("%d",prev);
}
に問題が私のコードです:問題は、このコードがループ永遠になり、問題はここは、だからここに永遠にループ
while(copy>0)
ですが、私は
while(copy>1)
にそれを変更した場合ということです
私はなぜそれが永遠にループするつもりだが、私は答えを見つけることができないようにしようとしています。私はコピーを減らしており、0になるとループから壊れるはずです。別のチェック
if(copy==0)break;
が、それでも、それはdidntのwork..Anyのsugestions?ありがとう
初期化する前に 'prevcounter'を使います。つまり、prevcounterの値は* indeterminate *(そして一見無作為)になります。 –
また、ループが 'copy == 1 'で入力された場合、' copy == 0'を '--copy'して行います。そして、あなたはそれを分割で使って、ゼロと*未定義の振る舞い*に分割します。私はあなたが[あなたのプログラムをデバッグする方法を学ぶ]ことをお勧めします(https://ericlippert.com/2014/03/05/how-to-debug-small-programs/)。デバッガのコードを介して(論理的に考えても明白ですが)。 –
if(copy == 0)break;を実行すると、if(n%copy == 0){'で0除算が実行されると思います。 – BLUEPIXY