练习九O题分成整数问题

此题我们注意到的问题是三个数不能相等,不含数字3和7的情况。

代码如下:#include <iostream>

#include <bits/stdc++.h>

using namespace std;

int main()

{

int n,x,y,z;

cin >> n;

int a = 0;

for(x = 1;x <= n;x++)

{

for(y = 2;y <= n;y++)

{

z = n-x-y;

if(z > x && z > y && x != 3 && y != 3 && z != 3 && x != 7 && y != 7 && z != 7)

{

a++;

}

}

}

cout << a << endl;

return 0;

}

但编译出来的例子是正确的,答案是错误的,为什么?

因为我们忽略了数字本身就具有3,7;

所以我们要先进行数位提取个十百位,在main函数外调用一个函数,代码如下:

int worse(int b)

{

int c = b % 10;

int d = b / 10 % 10;

int e = b / 100 % 10;

if(c == 3 || c == 7 || d == 3 || d == 7 || e == 3 || e == 7)

return 1;

else

return 0;

}

如果提取的位数有3或者是7,退出,否则进入下一步,代码如下:

int main()

{

int n,x,y,z;

cin >> n;

int a = 0;

for(x = 1;x <= n;x++)

{

for(y = 2;y <= n;y++)

{

z = n-x-y;

if(worse(x) || worse (y) || worse(z))

continue;

if(z > x && z > y && y > x)

{

a++;

}

}

}

cout << a << endl;

return 0;

}

让x,y进行遍历,但请注意,y一定要比x大,跟排列组合原理差不多,x排完1,进入2,y就不能排1了;以此类推,最后if语句中要xyz进行比较就可以了;完整代码如下:

#include <iostream>

#include <bits/stdc++.h>

using namespace std;

int worse(int b)

{

int c = b % 10;

int d = b / 10 % 10;

int e = b / 100 % 10;

if(c == 3 || c == 7 || d == 3 || d == 7 || e == 3 || e == 7)

return 1;

else

return 0;

}

int main()

{

int n,x,y,z;

cin >> n;

int a = 0;

for(x = 1;x <= n;x++)

{

for(y = 2;y <= n;y++)

{

z = n-x-y;

if(worse(x) || worse (y) || worse(z))

continue;

if(z > x && z > y && y > x)

{

a++;

}

}

}

cout << a << endl;

return 0;

}

全部评论

相关推荐

2025-12-28 09:59
复旦大学 Java
点赞 评论 收藏
分享
2025-12-28 16:32
重庆邮电大学 Java
程序员花海:1.技能放最后,来面试默认你都会,技能没啥用 2.实习写的看起来没啥含金量,多读读部门文档,包装下 接LLM这个没含金量 也不要用重构这种 不会给实习生做的 3.抽奖这个还是Demo项目,实际在公司里面要考虑策略,满减,触发点,触发规则 库存 之类的,不是这个项目这么简单 4.教育背景提前,格式为 教育背景 实习 项目 技能 自我评价
简历被挂麻了,求建议
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务