#include<iostream>
using namespace std;
int f(int N)
{
int s = 0;
if (N <=0)
return -1;
for(int x=0;x<=N/3;x++)
for (int y = 0; y <= N / 4; y++)
{
if (3 * x + 4 * y == N)
cout << "x=" << x << ", y=" << y << endl;
s++;
}
return s;
}
int main()
{
cout << f(12) << endl;
}
如有帮助给个采纳谢谢谢 , 效果如图 :
// 判断是否能够使用刚好 x 个 3 的倍数和 y 个 4 的倍数凑出 N
if(3 * x + 4 * y == N)
{
// 如果能凑出 N,则输出方案,并且每找到一次就让 s 加一
cout << "x=" << x << ", y=" << y << endl;
s++;
}
代码及解释如下
#include <iostream>
using namespace std;
// 定义了一个函数 f,它的参数是 N,返回值是整数类型
int f(int N)
{
int s = 0; // 初始化一个整型变量 s 值为 0,作为计数器
// 如果输入参数 N 小于等于 0,那么直接返回 -1
if (N <= 0)
return -1;
// 第一个循环变量表示可以使用多少个 3 的倍数
for(int x = 0; x <= N / 3; x++)
{
// 第二个循环变量表示可以使用多少个 4 的倍数
for(int y = 0; y <= N / 4; y++)
{
// 判断是否能够使用刚好 x 个 3 的倍数和 y 个 4 的倍数凑出 N
if(3 * x + 4 * y == N)
{
// 如果能凑出 N,则输出方案,并且每找到一次就让 s 加一
cout << "x=" << x << ", y=" << y << endl;
s++;
}
}
}
// 返回方案数
return s;
}
// 主函数
int main()
{
// 输出 f(12) 的结果
cout << f(12) << endl;
}
s++要放到if代码块啊,满足条件s才能加1啊
#include<iostream>
using namespace std;
int f(int N)
{
int s = 0;
if (N <=0)
return -1;
for(int x=0;x<=N/3;x++)
for (int y = 0; y <= N / 4; y++)
{
if (3 * x + 4 * y == N)
{
cout << "x=" << x << ", y=" << y << endl;
s++;
}
}
return s;
}
int main()
{
cout << f(12) << endl;
}
/*
该函数用来实现删除字符串中的所有空格
a为指向字符串数组的指针
*/
char *delete_space(char *a)
{
int n = strlen(a);
int i=0,j=0,k=0;
char b[n];
for(i=0;i<n;i++)
{
if(a[i]==' ')
{
k++;
continue;
}
else
{
b[j]=a[i];
j++;
a[i]='\0';
}
}
for(j=0;j<n-k;j++)
{
a[j]=b[j];
}
return a;
}
代码中存在一个问题:在转换数字为罗马数字时,对于数字中某一位上为0的情况,会调用exchangeCode()方法返回一个空字符串,但这个空字符串并没有被排除,仍然被加到了最终的输出字符串中。这会导致最终输出的罗马数字长度比预期多1。
期望输出:LVI
实际输出:LVI