#include <iostream>
using namespace std;
int f[33] = {3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45, 48, 51, 54,
57, 60, 63, 66, 69, 72, 75, 78, 81, 84, 87, 90, 93, 96, 99};
int b[20] = {5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85,
90, 95, 100};
int main (){
for (int x=100; x >= 1; x-- ){
if (x == f){
cout << "fizz" << endl;
} else {
if(x ==b){
cout << "buzz" << endl;
}else{
if(x==f & x==b){
cout << "fizzbuzz" << endl;
}else{
cout << x << endl;
}
}
}
}
}
我还在学习,所以这可能不是解决这个问题的最佳方法。我只是想知道这段代码的错误。感谢
答案 0 :(得分:1)
您的代码出错是您无法比较整数和指针,您要做的是查找x是否为f或x是否为b或两者。 但为什么你必须这样做,你知道管理集合f和b的属性,它们只是&#34;%3 == 0&#34; ,&#34;%5 == 0&#34;那么你可以做一些非常容易的事情,如
#include <iostream>
using namespace std;
int main (){
for (int x=100; x >= 1; x-- ){
if(x%3==0) cout<<"Fizz";
if(x%5==0) cout<<"Buzz";
else if(x%3 !=0) cout <<x;
cout<<endl;
}
}
答案 1 :(得分:1)
正如其他人所指出的那样,你已经在数组中预先计算了3和5的倍数,但是然后在int和这些数组之间进行直接比较 - 这总是会失败(ISO C++ forbids comparison between pointer and integer
)。如果您使用预先计算的数组,则可以使用std::find
or std::any_of
检查其中一个数组是否包含当前数字。
但是,如果您还包含了如何确定数字是否可以在代码中被3或5整除的知识,而不是预先填充3和5的倍数,那么您可能会获得更多可信度。这是通过以下方式完成的:模运算符%
。如果number % x
自然可被x整除,则任何fizbuzz
都将返回零。
您的代码中存在另一个逻辑缺陷。为了能够被3和5整除(即15,因为3和5都是素数),你需要改变支票的优先顺序,以便先检查15,否则你永远不会达到for (int x=100; x >= 1; x--){
bool isDiv3 = x % 3 == 0;
bool isDiv5 = x % 5 == 0;
if (isDiv3 && isDiv5){
cout << "fizzbuzz" << endl;
} else if (isDiv5) {
cout << "buzz" << endl;
} else if (isDiv3) {
cout << "fizz" << endl;
} else {
cout << x << endl;
}
}
分支(因为3和5分支也会被命中)。
Fizzbuzz通常会从1到100逐步完成,但这是您的原始&#39;倒数&#39; fizzbuzz改写:
fizz
通过将打印的buzz
和for (int x=100; x >= 1; x--){
bool isDiv3 = x % 3 == 0;
bool isDiv5 = x % 5 == 0;
if (isDiv3) {
cout << "fizz";
}
if (isDiv5) {
cout << "buzz";
}
if (!isDiv3 && !isDiv5)
cout << x;
}
cout << endl;
}
以15倍的比例相互运行,也可以消除其中一个if分支,尽管这不一定是易读:
CREATE OR REPLACE PROCEDURE country_demographics
(p_country_name IN countries.country_name%TYPE,
p_country_demo_rec OUT ed_type)
IS
TYPE ed_type IS RECORD (
c_name countries.country_name%TYPE,
c_location countries.location%TYPE,
c_capitol countries.capitol%TYPE,
c_population countries.population%TYPE,
c_airports countries.airports%TYPE,
c_climate countries.climate%TYPE);
BEGIN
SELECT country_name, location, capitol, population, airports, climate
INTO ed_type.c_name, ed_type.c_location, ed_type.c_capitol, ed_type.population, ed_type.airports, ed_type.climate
FROM countries;
DBMS_OUTPUT.PUT_LINE('Country Name:' || v_country_demo_rec.country_name ||
'Location:' || v_country_demo_rec.location ||
'Capitol:' || v_country_demo_rec.capitol ||
'Population:' || v_country_demo_rec.population ||
'Airports:' || v_country_demo_rec.airports ||
'Climate:' || v_country_demo_rec.climate );
IF SQL%NOTFOUND THEN
RAISE_APPLICATION_ERROR(-20201, 'This country does not exist.');
END IF;
END;
答案 2 :(得分:0)
x
是int
,而f
是数组。你无法用这种方式比较它们:
if (x == f){
如果你的技巧是检查数组x
中是否f
,我建议你必须检查f
中的每个值,例如
if(x == f[i++]){
其中i
是用于遍历f
数组的索引。
此外,您可以考虑在评估之前评估x
和f
中b
的条件。
答案 3 :(得分:0)
x是整数,而f和b是整数数组。如果你想在数组f和b中测试变量x的内容的成员资格,你可能想要定义自己的函数来检查它。
int is_in(int item, int[] list){
for(i = 0; i < sizeof(list) / sizeof(struct list); i++){
if(item==list[i]) return 1;
}
return 0;
}
然后将您的条件更改为if(is_in(x,b))