this.Label1.Text = "可能的组合是: <br> ";
for (int u = 1; u < 100; u++)
{
for (int v = 0; v < 4; v++)
{
for (int w = 0; w < 4; w++)
{
for (int z = 0; z < 10; z++)
{
for (int y = 0; y < 10; y++)
{
for (int x = 0; x < 10; x++)
{
if (u + 2 * v + 3 * z + 4 * z + 5 * y + 6 * x == 100)
{
this.Label1.Text += "选择题:" + u + "多选题" + v + "是非题:" + w + "填空题:" + z + "改错题:" + y + "问答题:" + x + "<br>";
}
}
}
}
}
}
}这个方法 系统会崩溃 能不能给个好的算法??
for (int u = 1; u < 100; u++)
{
for (int v = 0; v < 4; v++)
{
for (int w = 0; w < 4; w++)
{
for (int z = 0; z < 10; z++)
{
for (int y = 0; y < 10; y++)
{
for (int x = 0; x < 10; x++)
{
if (u + 2 * v + 3 * z + 4 * z + 5 * y + 6 * x == 100)
{
this.Label1.Text += "选择题:" + u + "多选题" + v + "是非题:" + w + "填空题:" + z + "改错题:" + y + "问答题:" + x + "<br>";
}
}
}
}
}
}
}这个方法 系统会崩溃 能不能给个好的算法??
解决方案 »
- MVC Url.Action怎么调用重载的方法
- gridview的<%# Bind("power") %>怎么嵌套多一个函数
- 100分------------改错
- 为了保证网站上的东西不被别人抓走我见很多网站用了js函数来打开网页这是怎么实现的?
- 请教如何用C#编写一个响应onmouseover事件的菜单下拉列表?
- 急救,请高手来看一下。
- ?如何解决ASP.NET 的MENU弹出菜单被遮挡的问题?!!
- 在使用了模板页的内容页里面写js函数非空验证
- 从dataset中绑定的数据,如何只取一部分(substring())
- 用vs.net时,作一个窗口就有好多文件,能不能设成只有一个文件?
- 求一正则表达式
- 数据绑定问题!(求教)
(2)我想你首先需要考虑一个总问题,你显示的这些东西,别人都会看吗?为什么要这样显示???如果不是,我想你在显示方式上做一些调整。
(3)看你的意思我想可以做的调整很多了。
试着写了一个,还可以再优化一些计算部分: this.label1 = "可能的组合是: <br> ";
for (int x = 0; x < 10; x++)
{
int ym = (100 - 6 * x) / 5;
ym = ym > 10 ? 10 : ym;
for (int y = 0; y < ym; y++)
{
int zm = (100 - 6 * x - 5 * y) / 4;
zm = zm > 10 ? 10 : zm;
for (int z = 0; z < zm; z++)
{
int wm = (100 - 6 * x - 5 * y - 4 * z) / 3;
wm = wm > 4 ? 4 : wm;
for (int w = 0; w < wm; w++)
{
int vm = (100 - 6 * x - 5 * y - 4 * z - 3 * w) / 2;
vm = vm > 4 ? 4 : vm;
for (int v = 0; v < vm; v++)
{
int u = 100 - 6 * x - 5 * y - 4 * z - 3 * w - 2 * v;
this.label1 += "....";
}
}
}
}
}
}
for (int x = 0; x < k; x++)
这个还能优化么?
这已经是表达的最精确的意思了,中间没有计算。所以没办法做任何优化,但是放到实际环境中,结合循环里面实际执行的推荐仍然是有可能优化的。如果真要做优化的话,象你这种有10W条记录的情况。我建议从两个方面着手:
(1)加入更多的限制条件,可以显著的减少循环或者尝试的次数。
以我上面提供的算法为便,主要就是结合之前已经选定的其它题型已经使用过的分数,来限制其它题型可能选择的范围。当你的选择题选择了99的时候,任何其它题目都无法被选择了,不是吗?
(2)将实时的行为改为静态的或者相对静态的行为。例如以上面的算法为便。你其实是要计算出所有可能的出题组合。不过你需要明白,这种组合是不会发生变化的(除非题型的分值变化),所以你可以采用我一开始提供的方案一,先静态生成,然后使用的时候读取出来。这样子实际上比任何优化都有效。从这个角度扩展开来,实际上就是一个优化你的业务流程的问题。不要把什么工作都堆到一起做,也不要把重复做不必要的工作。在设计时就可以极大的提高效率!
生成txt 静态的 总分不一定是100分 有可能150分 生成txt就不对了
郁闷 就没有其它的解决方法了 排列组合是种算法,向这种情况要用什么算法?
客户有的想法真的想法真是太奇怪了.
开始做一个项目还是先把需求写好吧.
快下班了,我说下我的细路.
我用类似.net2.0 wizard 向导,过滤每种题型.可选可不选.
LZ 的话,用户选择2种题型.那不是浪费很多资源吗???
总分可以设置 100
向导1;
100-选择题(管理员输入分值,选择题数目)---数据库当中用 select top 选择题数目 表 order by newid()
向导2;
100-选择题数目-多选题
......
主要是细路,别的你在优化.最后,剩多少就多少了.
总之.LZ 考虑下能不能用加减运算解决问题.给管理员多点选择题型的机会吧!!