这是一个问题。有人能找到答案吗?
允许最多两次“if”测试!
Given numbers from 1 to 100
If this number is divisble by 21 print "foobar"
If this number is divisble by 7 print "bar"
If this number is divisble by 3 print "foo"
If none of the above, print the number
只能打印一个数字。例如,21号应该只打印“foobar”,而不是所有“foobar”,“bar”,“foo”。
可以用任何语言完成。
非常感谢。
答案 0 :(得分:6)
诀窍是在你的问题中实现4个ifs,我们可以根据中间2来推断出顶部和底部的if。
for(int i=1;i<=100;i++)
{
string numberstr = i.ToString();
if(i % 3 == 0)
{
Console.Write("foo");
numberstr = "";
}
if(i % 7 == 0)
{
Console.Write("bar");
numberstr = "";
}
Console.WriteLine(numberstr);
}
答案 1 :(得分:2)
Ohai,FizzBuzz。
#include <iostream>
int main(){
for(int i=1; i <= 100; ++i){
bool foo = !(i % 3), bar = !(i % 7);
bool num = !(foo || bar);
foo && std::cout << "foo";
bar && std::cout << "bar";
num && std::cout << i;
std::cout << "\n";
}
}
答案 2 :(得分:2)
如果使用linq则为零(但实际上使用条件运算符作弊)。
using System;
using System.Linq;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
var lines = from i in Enumerable.Range(1, 100)
let foopart = i % 3 == 0 ? "foo" : ""
let barpart = i % 7 == 0 ? "bar" : ""
let numberpart = i % 3 != 0 && i % 7 != 0 ? i.ToString() : ""
select foopart + barpart + numberpart;
foreach (var line in lines)
Console.WriteLine();
}
}
}
答案 3 :(得分:1)
我可以使用零 if
语句执行此操作:
array[1..100] = {"1", "2", "foo", "4", "5", "6", "bar", ... "bar", "foo", "100"}
for i = 1 to 100:
print array[i]
我会留给您填写...
位并将其转换为真实语言。我自己做,但我怀疑这项任务是否有用: - )
或者,甚至更好:
print "1\n2\nfoo\n4\n...97\nbar\nfoo\n100"
答案 4 :(得分:1)
当然,有3个条件,但没有IF :) C#
var list = Enumerable.Range(1, 100).Select(n =>
n % 21 == 0 ? "foobar" :
n % 7 == 0 ? "bar" :
n % 3 == 0 ? "foo" : n.ToString());
foreach(var n in list)
{
Console.WriteLine(n);
}
答案 5 :(得分:1)
C中的代码
char* x = "\n";
int i;
for(i=1;i<=75;i++)
{
int y = ((i%5 == 0) && printf("%s","Foo"));
y=y+((i%7 == 0) && printf("%s","Bar"));
((!y==1) && printf("%d",i));
printf("%s",x);
}
答案 6 :(得分:0)
将结果保存为字符串。
示例:
String str = number.toString();
if(number % 7 == 0) {
str = "FOO";
}
if(number % 5 == 0) {
str = i % 7 == 0 ? str + "BAR" : "BAR";
}
return str;
答案 7 :(得分:-1)
pseudcode:
if (num/3)
{
print foo
}
elseif (num/7)
{
print bar
}
else
{
print num
}
当遇到可被21整除的数字时,基本上foobar会被连接。
答案 8 :(得分:-1)
for (int i = 100; i > 0; i--) {
int mul3 = (i /3)*3;
int mul7 = (i /7) * 7;
String fooOrBar = (mul3 == i && mul7 == i) ? "foobar" :(mul3 == i) ? "foo" : (mul7 == i) ? "bar" : "";
System.out.println(fooOrBar);
}