1. 打印100~200 之间的素数
这是一个我认为在入门阶段比较代表性的题 这道题的构成主要是从 初级 For循环 和简单的 素数筛法分析
以下是我的代码过程。写的比较jia
int main(){
int i=0;
int j=0;
for (i = 100; i <= 200; i++){
int count = 0; //局部变量
for (j = 2; j < i; j++){
if (i%j == 0){
count++;
break;
}
}
if (count == 0){
printf("该%d为素数\n",i);
}
}
经过个人的思考发现这种方法 在计算时需要将 内置For循环 重新遍历一遍 每一次 需要 以2开始比较影响效率。所以可以进行部分优化
for (i = 100; i <= 200; i++)
//{ //判断i是否为素数
// for (j = 2; j <= sqrt(i); j++) //类比为 面积一定 寻找有效边长
// { //for(j=101;j<=i-1;j+=2) 只做奇数部分的判断
// //for(j=2;j<=i-1;j++) 效率低列举所有数一一对比
// //判断2到n-1之间素数
// if (i % j == 0)
// {//J最大为n-1
// break;
// }
// }
//if (j>sqrt(i))
// //(j==i) 相等// {//如果i=j则不能被任何一个J整除
// printf("%d\n", i);
// }
//}
2. 输出乘法口诀表
本道题比较简单 考虑部分为 For循环的嵌套
int main(){
int i=0;
int j = 0;
short max = 0;
for (i = 1; i <= 9; i++){ //i控制行 j控制了列
for (j = 1; j<=i; j++){
max = i*j;
printf("%d*%d=%d\t", i, j, max);
}
printf("\n");
}
system("pause");
}
3. 判断1000年---2000年之间的闰年
体难点之一 && || 的使用 与条件判别
int main(){
//闰年 能被4整除不能被100整除 且 能被400整除
int year = 0;
scanf("%d", &year);
if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0))
{
printf("%d为闰年", year);
}
system("pause");
return 0;
}
代码整体比较简单此为记录贴 以后若学习到新的算法或者技能时可回来更新
总结:
这三题均有for循环的使用,for在使用时尤其注意条件语句的使用与逻辑关系,不易在for体内对循环变量修改。
判断素数部分 简单写了一下 自己的理解 在这里简单介绍一下,个人认为我在这里的理解是 可以类比于在 给定一个值
(此处将值比为一个面积一定的矩形 探讨其面积计算时的组合方式,sqrt(i) 当作正方形,此时其长与宽处于临界值)
然后循环一边 这样就可以在其到达中间值之前循环所有结果。
以这题为例:假设一值在100-200之间 假设100 在寻找其素数时
方案1 全部循环 挨个遍历(优势数字较少时比较简单)
方案2 循环遍历奇数部分可以很大程度上减少工作量
方案3 采用sqrt(i)形式 更大程度上提高效率
生命不息!奋斗不止!