20/07/04 第三天
小问题
在平时的编程中,我们往往会用到一些循环去构建算法,如for、while、do…while之类的,像for这样的语句还比较好,但是,另外两种就不好说了。大家可能常常会用了循环之后就开始“卡机”了。很大一部分原因是因为你在编写循环的时候,忘记在条件再次被检测之前更新条件了。如:
#include<iostream>
using namespace std;
int main(){
int N;
int wan_num = 2 , sum;
int yin_zi[100];
int i , j;
cin >> N;
while(wan_num<=N){
for(j = 1, i = 0; j < wan_num; j++) {
if(wan_num%j==0){
yin_zi[i] =j;
i++;
}
}
for(j = 0, sum = 0;j < i; j++){
sum += yin_zi[j];
}
if(wan_num == sum) {
cout << wan_num << " its factors are ";
for(j = 0, sum=0; j < i;j++)
cout << yin_zi[j] << " ";
cout<<endl
}
}
return 0;
}
上面这个是检索完数的程序,乍的一看,确实没有问题,思路也没有错,但是你用断点一步步检测就会发现在最后几行代码那忘记更新检测的条件了(如果没有断点将非常难找出这个bug),这会大大耗费在比赛中的时间。因此,想出了一个办法,在写循环体之前,把条件更新的语句先写好,再些循环体。
get新知识
1
晚上做算法的时候学到了怎么编写算法去计算平方根,并且将得到的数值精确到一定程度,部分代码如下:
cin >> a;
x = a / 2;
x1 = x;
x = (x1 + a / x1) / 2;
while (abs(x1 - x) >= 1e-6) {
x1 = x;
x = (x1 + a / x1) / 2;
}
这是计算a的平方根x的算法。
2
get到了怎么按一定位数输出double和float类型
double PT;
//保留n位小数//
cout << fixed <<setprecision(n) << PT <<endl;
//保留m位有效位
cout << setprecision(m) << PT <<endl;
今天上午家里停电了,下午才来电,就紧接着开始答辩,一直搞到晚上才结束,收完作业上交之后,才有时间做其他的事情。明天加油!