问题是..我必须在具有int main()
返回类型的函数的int
中打印“Bon appetit”..这是我的代码:
#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"
..,由于Bon appetit0
,它会显示为return b-(sum/2)
。
另一个问题是我不会让我在return b/(sum)/2
部分写else
,否则会产生一个警告,该警告被视为错误而代码不会简单地编译:
control reaches end of non-void function [-Werror = return type]
所以,简而言之“”我如何从INT类型函数中返回主键()?“ 请不要建议不要使用函数并在main()中写入代码。
链接到问题==&gt; https://www.hackerrank.com/challenges/bon-appetit/problem
答案 0 :(得分:2)
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
。阅读here原因
答案 1 :(得分:1)
您可以使用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;
}
答案 2 :(得分:0)
你的功能的每一个流程都必须返回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;
答案 3 :(得分:0)
它起作用了:
#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;
}