m3ph1st0s'in programlama bulmacası 1 (C ++) [kapalı]


26

Bu, sizin için bir C ++ bulmaca serisinin ilkidir. Umarım beğenirsiniz.

Yani, bulmaca no.1:

Aşağıdaki program göz önüne alındığında:

#include <iostream>
int main() 
{
   const int a=1;
   const int b=2;
   const float c=0.5;
   std::cout << a/b-a*c;
}

Çıktının 0 olması için programın herhangi bir yerinde tek bir yeni satıra bir kod ekleyin, böylece yeni satır AT MOST 18 karakter (boşluklar dahil) içerecek ve satırların geri kalanı değiştirilmemiş kalacaktır. Açık olmak gerekirse, geçerli bir yeni kod örneği:

#include <iostream>
int main() 
{
   const int a=1;
   const int b=2;
   int* p = NULL;
   const float c=0.5;
   std::cout << a/b-a*c;
}

15 karakterlik yeni bir satır eklenmiş, bu yüzden sorun yok. Ancak sorunu çözmüyor.

Bu sizin için çok basit ise, endişelenmeyin, daha fazlası geliyor!


2
Çok mutlu biri bazen C ++ bir soru gönderir! Yani, bir C ++ çözümünün 20 ya da 30 satır olduğu tüm bulmacalarla, J ya da K ya da Golfscript'te çözümler gönderen insanlar bir süre sonra sinir bozucu hale geliyor.
Bay Lister

3
Sonuç geçerli, iyi tanımlanmış bir C ++ mı olmalı yoksa UB kullanabilir mi? (Ama Bay Lister'in belirttiği gibi, orijinal kod C ++ 'da bile geçerli değil.)
Konrad Rudolph

4
geçerli değil. main int döndürmelidir (c ++ standardını okuyun)
BЈовић

2
Burada noktayı kaçırıyoruz. sakıncası yoksa bir int ve bir dönüş 0 koymak.
Bogdan Alexandru

11
@Bogdan: Dafuq? İlk olarak, DevC ++ çok açık bir şekilde eski, çıktısının önemi yok. İkincisi, herhangi bir OS'de herhangi bir zamanda herhangi bir konfigürasyonda verilen herhangi bir derleyicinin kabul edip etmemesi, C ++ 'ı geçerli kılmaz.
DeadMG

Yanıtlar:


14
#define int float

de çalışması gerekir ve aynı uzunluktadır.


Bu fikir ilk geldiğimde aklımda olan buydu
Bogdan Alexandru

5
#define int floataslında tanımsız davranış. Anahtar kelimelere yeni bir anlam veremezsiniz.
fredoverflow

Fred, kaynaklarından alıntı yapabilir misin? GCC cpp belgeleri "Herhangi bir geçerli tanımlayıcıyı bir C anahtar kelimesi olsa bile makro olarak tanımlayabilirsiniz" diyor.
Dan

@Dan: C ++ Standardı yasaklar.
DeadMG

3
UB olabilir, ancak bazı popüler derleyiciler zaten onu desteklemektedir. #define int ERRORKendimi int32_tyerleşik türlerin yerine eşdeğerini kullanmaya zorlamak için yaptım . Etrafıma geldiğimde int main(), makroyu unuttum ve kodumun neden derlemediğini merak ettim.
dan04

33

Bir = 1'den başka bir kapsam içine alarak kurtulabiliriz:

#include <iostream>
main() 
{
int a=0;if(0)
    const int a=1;
    const int b=2;
    const float c=0.5;
    std::cout << a/b-a*c;
}

Bu bence 13 karakter. Ya da daha iyisi a, ayrıca 0 ile sonuçlanan yeni bir ürün edinin :

#include <iostream>
int main() 
{
   const int a=1;
   const int b=2;
   const float c=0.5;
if(int a=2)
   std::cout << a/b-a*c;
}

Bu 11 karakter


24
#include <iostream>
main() 
{
   const int a=1;
#define a 0
   const int b=2;
   const float c=0.5;
   std::cout << a/b-a*c;
}

1 yeni hat, 12 yeni karakter


Ben de bunu göndermek istedim ... +1 senin için.
H2CO3

İlk fikrim soruyu okuduğumda)))
Qwertiy

23

Yani, #define a 0Bitti. Bunun gönderildiğini gördüm - şaşırtıcı olmayan bir şekilde.

Şaşırtıcı bir şekilde, bu yayınlanmadı:

#include <iostream>
main() 
{
   const int a=1;
   const int b=2;
   const float c=0.5;
   std::cout<<0||
   std::cout << a/b-a*c;
}

14 karakter

Yapmalı, değil mi?


21
#include <iostream>
main() 
{
const int a=0;//\
   const int a=1;
   const int b=2;
   const float c=0.5;
   std::cout << a/b-a*c;
}

17 karakter.

Bu arada, orijinal program MSVC kapsamında derlenmiyor ve bu maingeri dönüş türüne sahip değil.


2
int a = 0; // \ ayrıca hile yapacak
kopya

2
Kesinlikle. Ama bu "en kısa yol kazandı" yarışması mı?
Bay Lister,

Öyle düşündüm, ama değil. Bu arada, güzel hüner
copy

2
Evet, en kısa çözüm codegolf SE'de kazanır. bkz: SSS
BЈовић

2
@ BЈовић SSS, en kısa çözümün gerçek kod-golf soruları için kazandığını söylüyor. Bu soru açıkça bir kod golf sorusu değil.
kojiro

11

18, newline dahil

#define float int

Bunun işe yarayacağından emin değilim ... c'yi bir şamandıra olarak ilan edip 0,5 ile başlatıyorsunuz
Bogdan Alexandru

5
Bu sıfıra düşecek.
DeadMG

haklısın, komik bir şey asla ondalık değere sahip bir int başlatmadım, derleyici hatası olacağını düşünmüştüm, ancak sadece bir uyarı veriyor
Bogdan Alexandru

2
@BogdanAlexandru C ++ standardına göz atıyor; oyundaki örtük dönüşümü özellikle ayrıntılarıyla anlatıyor.
oldrinb 28:12

2
Tüm derleyiciler buna izin vermesine rağmen, standardın anahtar kelimeleri (ve floatbir anahtar kelime) yeniden tanımlamayı yasakladığını unutmayın .
avakar


9
#include <iostream>
main() 
{
   const int a=1;
   const int b=2;
   const float c=0.5;
#define a 0;1
   std::cout << a/b-a*c;
}

14 karakter


7
#include <iostream>
main() 
{
   const int a=1;
   const int b=2;
   const float c=0.5;
   return puts("0");
   std::cout << a/b-a*c;
}

17 karakter.


1
Henüz en iyi çözüm, çünkü C ++ ile ilgili bir şey karşısında uçuyor.
fabspro

3
`koyar 'bu kapsamda ilan edilmedi
shiona

@shiona hangi derleyiciyi kullanıyorsun?
Ashrr

@Ashrr gcc (g ++), 4.5.4
shiona

1
Düşünmeyin, bu kod 0 döndürür. Ancak ünlem işareti ile boşluğu değiştirebilirsiniz. Neyse, ne zaman koyar sıfır döndüğünden emin değilim.
Qwertiy

7
#include <iostream>
main()
{
   const int a=1;
   const int b=2;
   const float c=0.5;
std::cout<<0;//\
   std::cout << a/b-a*c;
}

17 karakter, bu yüzden sadece uyuyor.


7

C ++ bilmiyorum, ancak soruyu temel alarak, yalnızca 0 çıktısını almak için bir satır giremez misiniz? Soru, çıktının 0 olması gerektiğini belirtir, çıktıyı 0 olarak DEĞİŞTİRMeniz gerektiğini belirtmez.

std::cout << 0

(C ++ hakkında 0 ipucum var, belki birileri bu konsepti kullanabilir)


Ah, çıktı sadece 0 olmalı, açık olduğunu düşündüm, aksi halde bulmaca olmazdı, değil mi?
Bogdan Alexandru

7
@BogdanAlexandru Kötü yazılmış bir soruyu kullanmanın bu bulmacaları çözmek için yaygın bir teknik olduğunu göreceksiniz. Kullanıcıların bu kısayolları almalarını önlemek istiyorsanız, kendi sorunuzu analiz etmek için birkaç dakika ayırın ve olası belirsizlikleri gidermeye çalışın.
saat

3

Mafya çözümüne benzer 12 karakter

#include <iostream>
int main() 
{
   const int a=1;
   const int b=2;
   const float c=0.5;
#define a b
   std::cout << a/b-a*c;
}

diğer kombinasyonlar da çalışır, ister #define a cveya#define c 0


2

olmadığını biliyorum , ama bugün o şapkayı takmış gibiyim!

#include <iostream>
int main() 
{
   const int a=1;
   const int b=2;
   const float c=0.5;

-a;

   std::cout << a/b-a*c;
}

newline dahil beş karakter;


2
Bunun nedeni, derleme değil aise const.
Csq

Hata! Derleyiciye vermeliydim! :-(
Toby Speight

0

c ++ her neyse ...

echo "0"; exit
#include <iostream>
int main() 
{
   const int a=1;
   const int b=2;
   const float c=0.5;
   std::cout << a/b-a*c;
}

üzerinden koşmak:

sh mp.cpp

İyi deneme ama gereksinimi ihlal eden: geçerli C ++.
Konrad Rudolph

0

Bay Lister'ın cevabında bir değişken ama biraz daha az belirgin.

#include <iostream>
int main() 
{
   const float a=1; //??/
   const int a=1;
   const int b=2;
   const float c=0.5;
   std::cout << a/b-a*c;
}

-1
#include <iostream>
int main() 
{
int a;if(a)
   const int a=1;
   const int b=2;
   const float c=0.5;
   std::cout << a/b-a*c;
}

Peki ya bu 11 karakter ...


1
Buradaki sorun, daha int aönce ifbaşlatılmamış, yani aherhangi bir değere sahip olabilir.
frozenkoi

1
Bu tanımsız, için başlatılmamış bir değer kullanıyorsunuz a.
Konrad Rudolph

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.