2010-07-23 13 views

Odpowiedz

24

Nie sądzę, można to zrobić przez usuwanie charakter, ale mam trzy rozwiązania, które zastąpić (dobrze, jeden z nich dodaje charakteru, ale tylko dlatego, że nie mają spacje w programie. Gdybyś miał białe spacje, zastąpiłaby spację).

Roztwór 1

int i,n=20; 
for(i=0;-i<n;i--) // -i < n 
    printf("-"); 

Roztwór 2

int i,n=20; 
for(i=0;i<n;n--) // n-- 
    printf("-"); 

Roztwór 3

int i,n=20; 
for(i=0;i+n;i--) // while i + n is not zero 
    printf("-"); 
+5

+1 - Od razu podrapałbym się w głowę, zanim zaproponowałem rozwiązanie 3. –

1
int i,n=20; 
for(i=0;i<n;i--) //change i-- to i++ 
printf("-"); 

EDYCJA: Używałeś operatora dekrementacji zamiast inkrementacji. A więc chcesz, żeby wzrastał, aż osiągnie 20. W którym momencie przestanie, bo wtedy nie będę już mniejszy niż 20, ale równy.

+0

HOCUS POCUS - Pytanie mówi: Single Character, to, co powiedziałeś, przyszło mi do głowy ... ale osoba pytająca mnie nie jest szczęśliwa. – Sadique

+0

"Usuń pojedynczy znak lub operatora z powyższego kodu" - zastąpiłeś dwa znaki. –

+0

To nie jest usuwanie. Zmienia to na coś innego. –

0

mogę to zrobić przez dodając pojedynczy znak:

int i,n=20; 
for(i=0; - i <n;i--) 
    printf("-"); 
+1

Co więcej, wierzę, że możesz mentalnie spróbować usunąć każdą postać lub każdego operatora, i przekonać się, że żadne rozwiązanie, które ściśle usuwa jedną postać lub operatora, nie spełnia tego pytania. –

+0

To wyświetli "-" około 2 miliardy razy (na 32-bitowym procesorze). -20 jest mniejsze niż 20 ... -21 jest mniejsze niż 20 ... –

+2

Cóż, jeśli wydrukuje 2 miliardy razy, z pewnością wydrukowałoby 20 razy ... –

2
int i,n=20; 
for(i=0;i<n;n--) 
printf("-"); 

ja nie wiem, czy jest ok, ale zastępując zmieniając ja-- do n- powinno wystarczyć

+0

Założę się, że to jest to, czego szuka poszukiwacz. ;) –

+0

Tak, to technicznie nie "kasowanie", więc nie jestem pewien. –

+0

@Heath - był "poser" freudowski poślizg? :) –

5

Problem, jak stwierdzono, nie ma rozwiązania. Albo ty, albo ktokolwiek, kto dał ci ten problem, stwierdził to niepoprawnie.

+3

Ta odpowiedź wymaga formalnego dowodu. – intuited

+0

@intuited: Ta odpowiedź pozwala na wykonanie brutalnego testu, o czym już wspomniano w innym komentarzu. Można po prostu wypróbować wszystkie możliwe warianty. Nie widzę sensu w publikowaniu tego rodzaju dowodów w całości. Wystarczy powiedzieć, że to zrobiłem :) – AnT

+0

Uważam, że nie będę w stanie odeprzeć twojego wniosku, że to zrobiłeś. :) –

0

Zmiana:

for(i=0;i<n;i--) 

do:

for(i=0;i<n;n--) 

Ale nie widzę, w jaki sposób można usunąć tylko char lub operatora ... Musisz modyfikować operatora lub znak.

2

Układanka ma umożliwić "zmianę jednej postaci".

Rozwiązania są zmiany < do +, zmienić i do n, lub zmienić miejsce przed I w środku pętli for do grupy - (tam ma być spacji.)

Znajomy robi” t Uzyskaj pytanie.:-)

+0

Zmiana < to > nie działa ... –

+0

Masz rację, myliłem to z innym, ale podobnym zwiastunem. :) whoops! naprawiono – corsiKa

10

Znalazłem odniesienie do problemu na C Puzzles. (Jest w komentarzu, więc z pewnością nie jest oryginalnym źródłem.)

Poniżej znajduje się fragment kodu C, którego zamiarem było wydrukowanie znaku minus 20 razy. Ale możesz zauważyć, że to nie działa.

#include <stdio.h> 
int main() 
{ 
int i; 
int n = 20; 
for(i = 0; i < n; i--) 
printf("-"); 
return 0; 
} 

Dobrze mocowania powyższy kod jest prosta. Aby problem był interesujący, musisz naprawić powyższy kod, zmieniając dokładnie jedną postać. Istnieją trzy znane rozwiązania. Sprawdź, czy możesz uzyskać te wszystkie trzy.

Należy pamiętać, że instrukcje powiedzieć:

... trzeba rozwiązać powyższy kod, zmieniającym dokładnie jeden znak.

Jednym z rozwiązań jest zmiana i-- na n-- w nagłówku pętli for.

+1

To oczywiście inny problem. W tym problemie możemy "usunąć tylko jeden znak lub operatora". – AnT

+0

Miłe znalezisko. Próbowałem go również szukać, ale nie mogłem nic znaleźć. – spinon

+1

@spinon: Miałem całkiem niezły pomysł, od czego zacząć. Ciężko jest znaleźć konkretny kod C na szeroko otwartym Internecie. :) –

0

Minęły lata odkąd c, i jestem pedantyczny, więc proszę wybacz mi, ale ... czy program nie drukuje "-" już 20 razy? A potem trochę?

Jeśli usuniesz "f" z "printf", czy nadal nie drukuje "-" 20 razy? Przynajmniej?

Jeśli jest to podchwytliwe pytanie, być może jest to podstęp ...

1

Program już drukuje - 20 razy - i to nadal go wydrukować dużo więcej później. Układanka nie powiedziała, że ​​trzeba go wydrukować dokładnie 20 razy.

Jeśli naprawdę musisz coś usunąć, możesz uzyskać podobne zachowanie, usuwając operatora --.

int i,n=20; 
for(i=0;i<n;i) // no more decrement 
printf("-"); 

Inne znaki, które są kandydatami do usunięcia, to podziały wiersza.

+0

dlaczego nie usunąć pierwszych 0? – mvds

+0

To naprawdę inna możliwość. –

Powiązane problemy