当前位置:编程学习 > C/C++ >>

关于C++的一个问题

输入完这个后我按ctrl+f5 之后出现

这是怎么回事 该怎么解决

补充:+我QQ971743515

追问:我的电脑是win7

为什么要这样改

这样改了不会出什么问题吧

   有没有什么其他方面的影响

答案:嗯,这可能是你的系统路径缺失。如果是win7系统,打开“计算机”,菜单栏上选择“系统属性”,“高级系统设置”,“高级”,“环境变量”,在“系统变量”框找到PATH,双击之,在末尾把路径全名放上去,然后保存设置。

路径全名:也就是上面那个错误弹出窗口中显示的路径,你在我的电脑上一直打开到debug文件夹,然后把地址栏中的内容复制,粘贴过去就好了。
大概也就是这个问题吧。
按F5
//这个主要是一个算法问题了,下面是一个初步的实现,不过没有考虑算法的复杂度问题,估计效率比较低下,凑合先贴上。
#include <stdio.h> #include <math.h>
// POSITIVE_PRECISION 和 NEGATIVE_PRECISION 分别表示最小正数和最大负数,可变。 // 因为浮点数无法直接比较是否相等(或者等于零),只能比较是否在精度范围之内,我们假定介于最小正数和最大负数之间的数就是零。 #define POSITIVE_PRECISION 0.0001 #define NEGATIVE_PRECISION -0.0001 #define MAX_NUM 20 //多少个数字进行分组 int one2hun[MAX_NUM]; //所待分组的数值 int character[MAX_NUM];//记录分组情况,值为1在一组,-1在另外一组 int flag[2] = {1, -1}; //两个组的标记值 //初始化待分组的数值(从1到MAX_NUM) void init() { for(int i = 0; i < MAX_NUM; i++) { one2hun[i] = i + 1; } } //打印分组情况(如输出序列:1 -1 1 -1 ...,其中1为一组,-1为另外一组,索引和one2hun对应) void print_group() { for(int i = 0; i < MAX_NUM; i++) { printf("\t%d(%d)", one2hun[i], character[i]);
} printf("\n"); } //对MAX_NUM个数进行分组(递归函数),举个例子说明: //我们假定对 1 2 3 4 5 6 7 8 9 10 十个数分组情况是(1,2,3,4,5,6) 与 (7,8,9,10) //则只要 sqrt(1) + sqrt(2) + .... + sqrt(6) 和 sqrt(7) + sqrt(8) + ... + sqrt(10) 在精度误差范围之内就表示相等。 //变形成以上两个求和表达式的差在最小正数和最大负数之间即可: // sqrt(1) + sqrt(2) + .... + sqrt(6) - (sqrt(7) + sqrt(8) + ... + sqrt(10)) = // 1*sqrt(1) + 1*sqrt(2) + .... + 1*sqrt(6) + (-1)*sqrt(7) + (-1)*sqrt(8) + ... + (-1)*sqrt(10) // 只要以上求和表达式在最小正数和最大负数之间即可。 // 所以我们给每个数分别用1或者-1作为标记,1在一组,-1在另外一组。 //参数:r表示求和表达式的值, i表示正在求第几个数的平方根。 void esqrt(double r, int i) { for(int j = 0; j < 2; j++) //每个数有两种情况(在第一组或者在第二组) { character[i] = flag[j]; //第i个数的当前分组标记,1表示第一组,-1表示第二组 r += character[i] * sqrt((double)one2hun[i]); //求和(这里加上了标记 character[i],值分别为1或者-1)
if(i == MAX_NUM) //是否已经加到第MAX_NUM个数 { if(r > NEGATIVE_PRECISION && r < POSITIVE_PRECISION) //求和表达式的值在最小正数和最大负数之间(认为分组的数平方根之和相等),这就是我们要的了。 {
printf("add = %lf\n", r); //求和表达式的值 print_group(); //打印分组情况 } } else //还没有加到第 MAX_NUM 个数, 递归加下一个i+1 { esqrt(r, i+1); }
r -= character[i] * sqrt((double)one2hun[i]); //对第i个数重新分组,即从表达式里面除去。 } } int main(void) { init(); //初始化 esqrt(0, 0); //从第一个数开始加
system("pause"); return 0; } ------------------------------------ 输出: add = -0.000072 1(1) 2(1) 3(1) 4(1) 5(-1) 6(-1) 7(-1) 8(1) 9(1) 10(1) 11(-1) 12(1) 13(-1) 14(-1) 15(1) 16(1) 17(-1) 18(-1) 19(1) 20(-1) add = -0.000072 1(1) 2(-1) 3(1) 4(1) 5(-1) 6(-1) 7(-1) 8(-1) 9(1) 10(1) 11(-1) 12(1) 13(-1) 14(-1) 15(1) 16(1) 17(-1) 18(1) 19(1) 20(-1)

上一个:关于二级C++公共基础部分
下一个:C++学生成绩排名系统

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,