>问题是..我必须从具有返回类型的函数int main()
打印"Bon appetitint
..这是我的代码:
#include <iostream>
#include <vector>
using namespace std;
int bonAppetit(int n, int k, int b, vector <int> ar) {
// Complete this function
int sum = 0;
for(auto i : ar )
{
sum += i;
}
sum -= ar[k];
if(sum/2 == b)
cout<< "Bon Appetit"<<endl;
else
return b-(sum/2);
}
int main() {
int n;
int k;
cin >> n >> k;
vector<int> ar(n);
for(int ar_i = 0; ar_i < n; ar_i++){
cin >> ar[ar_i];
}
int b;
cin >> b;
int result = bonAppetit(n, k, b, ar);
cout << result << endl;
return 0;
}
如果我使用cout<<"Bon appetit"
.在输出中,由于return b-(sum/2)
,它显示为Bon appetit0
。 另一个问题是我的 IDE 不允许我在else
部分编写return b/(sum)/2
,否则会生成一个警告,该警告被视为错误,并且代码不会简单地编译:control reaches end of non-void function [-Werror = return type]
所以,简而言之"我如何从 int 类型函数将字符串返回给 MAIN()"? 请不要建议不使用函数并在main()中快速编写代码。
链接到问题==> https://www.hackerrank.com/challenges/bon-appetit/problem
int bonAppetit(int n, int k, int b, vector <int> ar) {
// Complete this function
int sum = 0;
for(auto i : ar )
sum += i;
sum -= ar[k];
if(sum/2 == b)
return -1;
else
return b-(sum/2);
}
主要:
if (result != -1) std::cout << result << std::endl;
else std::cout << "Bon Appetit" << std::endl;
请不要使用using namespace std
.在这里阅读原因
您可以使用byRef Arguments从一个函数返回两个值。 这是一个简单的示例:
char* isDividableOn(int num, int divider ,int & remain){
if ( num % divider == 0){
remain = 0;
return "number is dividable";
}
else {
remain = num % divider;
return "number is not dividable";
}
}
int main (){
int num = 11;
int divider = 3;
int res = -1;
cout << isDividableOn(num , divider, res);
/// in this point value of res now is set to 2;
}
它起作用了:
#include <iostream>
#include <vector>
using namespace std;
string bonAppetit(int n, int k, int b, vector <int> ar) {
// Complete this function
int sum = 0;
for(auto i : ar )
{
sum += i;
}
sum -= ar[k];
if(sum/2 == b)
return "Bon Appetit";
string str = to_string(b-(sum/2));
return str;
}
int main() {
int n;
int k;
cin >> n >> k;
vector<int> ar(n);
for(int ar_i = 0; ar_i < n; ar_i++){
cin >> ar[ar_i];
}
int b;
cin >> b;
string result = bonAppetit(n, k, b, ar);
cout << result << endl;
return 0;
}
你的 fonction 的每个流都必须返回一个int
。因此,只需显示您的文本,然后返回。
int bonAppetit(int n, int k, int b, vector <int> ar) {
// Complete this function
int sum = 0;
for(auto i : ar )
{
sum += i;
}
sum -= ar[k];
if(sum/2 == b)
cout<< "Bon Appetit"<<endl;
return b-(sum/2);
}
如果你真的需要将字符串"返回"到 main,这意味着你的函数同时返回int
和 ̀string
。在C++中,函数只有一个返回类型。然后,您有几个选项可以让函数提供两个输出(int
和string
)。以下是两个简单的选项:
返回pair
(int
和string
):
pair<int,string> bonAppetit(int n, int k, int b, vector <int> ar) {
// Complete this function
int sum = 0;
for(auto i : ar )
{
sum += i;
}
sum -= ar[k];
return make_pair( b-(sum/2), ((sum/2 == b) ? "Bon Appetit" : "") );
}
那么你的主要将做:
pair<int,string> result = bonAppetit(n, k, b, ar);
if ( !result.second.empty() )
cout << result.second << endl;
cout << result.first << endl;
或者传递一个string
作为对函数的引用(如果不是const
引用,它将让你的函数修改它):
int bonAppetit(int n, int k, int b, vector <int> ar, string& message)
{
// Complete this function
int sum = 0;
for(auto i : ar )
{
sum += i;
}
sum -= ar[k];
if (sum/2 == b)
message = "Bon Appetit";
return b-(sum/2);
}
那么你的主要将做:
string text;
int result = bonAppetit(n, k, b, ar, text);
if ( !text.empty() )
cout << text << endl;
cout << result.first << endl;