Bon appetit:从int返回类型函数在main()中打印一个字符串

时间:2017-09-09 08:13:44

标签: c++

问题是..我必须在具有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

4 个答案:

答案 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,则表示您的函数返回intstring。在C ++中,函数只有一种返回类型。然后,您有几个选项可以让您的函数提供两个输出(intstring)。以下是两个简单的选项:

返回pairintstring):

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;
}