数学问题,请大家帮忙

华亭真人 2009-05-29 02:40:00
离散点:
1,2,5,10,30,35,45,50,70,90,100,105,300,350,1000,3000,3500,10000.

求一算法,可以自动将一个数字转化为如下格式:
比如332=300*1+30*1+2*1

又:69=50*1+10*1+5*1+2*2

...全文
114 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
绿色夹克衫 2009-05-29
  • 打赏
  • 举报
回复
这样递归也算是一个办法,不过效率上存在小小的问题。

f(int n) => f(int n,int index) 其中index指的是当前处理元素的index,这样就不用每次都重新找这个index了!


[Quote=引用 3 楼 FallingStar08 的回复:]
已解决。谢谢。

C/C++ code
#include <iostream>
#include<vector>
using namespace std;

vector<int> vec;


void f(int n)
{
for(int i=0;i<vec.size();i++)
{
if(n==vec[i])
{
cout<<n<<endl;
return ;
}

}
for( i=0;i<vec.size()-1;i++)
{
if(n>vec[i]&&n<vec[i+1])
{

br…
[/Quote]
华亭真人 2009-05-29
  • 打赏
  • 举报
回复
已解决。谢谢。

#include <iostream>
#include<vector>
using namespace std;

vector<int> vec;


void f(int n)
{
for(int i=0;i<vec.size();i++)
{
if(n==vec[i])
{
cout<<n<<endl;
return ;
}

}
for( i=0;i<vec.size()-1;i++)
{
if(n>vec[i]&&n<vec[i+1])
{

break;
}

}
cout<<vec[i]<<endl;
f(n-vec[i]);


}


void main()
{

vec.push_back(1);
vec.push_back(2);
vec.push_back(5);
vec.push_back(10);
vec.push_back(30);
vec.push_back(35);
vec.push_back(45);
vec.push_back(50);
vec.push_back(70);
vec.push_back(90);
vec.push_back(100);
vec.push_back(105);
vec.push_back(105);
vec.push_back(105);
vec.push_back(105);
vec.push_back(300);
vec.push_back(350);
vec.push_back(1000);
vec.push_back(3000);
vec.push_back(3500);
vec.push_back(10000);
f(687);
vec.clear();

}
华亭真人 2009-05-29
  • 打赏
  • 举报
回复
不懂。。。。
绿色夹克衫 2009-05-29
  • 打赏
  • 举报
回复
看LZ给的例子,用贪心就可以了。

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧