热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

for循环,为什么我总爱把问题想复杂了

求1-100之间的素数用这个数去除2-sqrt(i),如果有一个数能被除断,则为合数我总把思维停在能除断上,所以if(i%j0)break;可是又加if(i%j!0)printf(

求1-100之间的素数
用这个数去除2-sqrt(i),如果有一个数能被除断,则为合数
我总把思维停在能除断上,
所以  if(i%j==0)  break;
可是又加 if(i%j!=0)  printf("%d",i);
孰不知必需将i去除以2-sqrt(i)之间所有的数后,才可以printf.
也就是说在内层循环被除数时,可以有一个leap标记,主要是判断
i是否为素数。

#include"math.h"
void main()
{int i,j,leap=1;
 for(i=1;i<=100;i++)
   {for(j=2;j<=sqrt(i);j++)
     if(i%j==0)
     {leap=0;
      break;
     }
     if(leap)
     printf("%4d",i);
       leap=1;
   }
getch();
}

首先leap=1,如果能除断,leap=0;break;注意这里break的作用范围,
它只跳出
   for(j=2;j<=sqrt(i);j++) 
     if(i%j==0)
     {leap=0;
      break;
     }


if(leap)
     printf("%4d",i);
       leap=1;
是没有包含在里面的,所以它还是会被执行,如果i为素数,则到这里,
leap还是1,就会执行printf。否则leap=0,不会打印合数,再把leap值
置为1,这是必须的。
你可以这样理解这里的leap=1;
它就是一个i的"假素数"标记,用j值检验i,到最后,若它货真价实,就
是好东西。
大括号里面结束,再就i<=100;i++
直到打印出所有素数。


冒泡排序
简单点说,有多少个数,就要进行多少趟冒泡排序(其实最后一趟不必)
一趟排序,只选出最大的或最小的
想一想,从第一个位置开始排,把最后一个数和它前面的数比较,把最大(小)
的放在第一个位置,再排第二个位置。如此。

#include"stdio.h"
void main()
{int A[5],i,j,temp;
 for(i=0;i<=4;i++)  //循环输入
  scanf("%d",&A[i]);
  for(i=0;i<=4;i++)
    {for(j=4;j>=i;j--)
     if(A[j]>A[j-1])
       {temp=A[j]; //将大数前移,放到指定位置
        A[j]=A[j-1];
        A[j-1]=temp;
       }
     }
 for(i=0;i<=4;i++)  //循环输出
  printf("%4d",A[i]);
   getch();

}

for(j=4;j>=i;j--)
这里,j>=i算是把已经排好的位置不管,再从其它的数里选出最大的。
放在下一个位置。

 

 

求1!+2!+3!+4!+...+N!

我开始的思路是两层for循环

   main()
{int N,i,j,k=1,s=0;
 printf("please input the integer:");
 scanf("%d",&N);
 for(i=1;i<=N;i++)
   {for(j=1;j<=i;j++)
    {k*=j;}
    s+=k;
   }
printf("1!+2!+3!+...+N!=%d/n",s);
getch();
}

 

 这里

for(j=1;j<=i;j++)
    {k*=j;}
就是算N!

而s+=k;就是求和了。

 

想得美

看看输出结果

please input the integer:3
1!+2!+3!+...+N!=15

 

而1!+2!+3!=1*1+2*1+3*2*1=9

哪儿有问题?
令N=3

有 for(i=1;i<=3;i++)

    {for(j=1;j<=i;j++)
    {k*=j;}
    s+=k;
    }

 

当i=1时,k=1,s=1

i=2,k=2,s=1+2=3

i=3,k=k*j=2*1*2*3=12,s=s+k=3+12=15

就是这里

你会发现,k值是把原来的k值带进去l

所求的根本不是N!,而是N!*k

然后,我就得出了我很爱自作聪明的结论。

 

正确算法

 

main()
{int N,i;
 long k=1,s=0;
 printf("please input the integer:");
 scanf("%d",&N);
 for(i=1;i<=N;i++)
  {k*=i;
   s+=k;
  }
 printf("1!+2!+3!+...+N!=%ld/n",s);
getch();

}

please input the integer:3
1!+2!+3!+...+N!=9

想一想,3!=2!*3, 4!=3!*4 ,...

 

for(i=1;i<=N;i++)
  {k*=i;
   s+=k;
  }

 

i值每自加一次,k值就是(原先的数)!*新数=(新数)!

s就把(新数)!加进去

以后多多思考。

 

 

 

 


推荐阅读
  • [线段树|平衡树|树状数组]LightOJ - 1087 - Diablo
    1087-DiabloPDF(English)StatisticsForum ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • 本文介绍了一个题目的解法,通过二分答案来解决问题,但困难在于如何进行检查。文章提供了一种逃逸方式,通过移动最慢的宿管来锁门时跑到更居中的位置,从而使所有合格的寝室都居中。文章还提到可以分开判断两边的情况,并使用前缀和的方式来求出在任意时刻能够到达宿管即将锁门的寝室的人数。最后,文章提到可以改成O(n)的直接枚举来解决问题。 ... [详细]
  • 3.223.28周学习总结中的贪心作业收获及困惑
    本文是对3.223.28周学习总结中的贪心作业进行总结,作者在解题过程中参考了他人的代码,但前提是要先理解题目并有解题思路。作者分享了自己在贪心作业中的收获,同时提到了一道让他困惑的题目,即input details部分引发的疑惑。 ... [详细]
  • 本文介绍了九度OnlineJudge中的1002题目“Grading”的解决方法。该题目要求设计一个公平的评分过程,将每个考题分配给3个独立的专家,如果他们的评分不一致,则需要请一位裁判做出最终决定。文章详细描述了评分规则,并给出了解决该问题的程序。 ... [详细]
  • 本文介绍了UVALive6575题目Odd and Even Zeroes的解法,使用了数位dp和找规律的方法。阶乘的定义和性质被介绍,并给出了一些例子。其中,部分阶乘的尾零个数为奇数,部分为偶数。 ... [详细]
  • Linux环境变量函数getenv、putenv、setenv和unsetenv详解
    本文详细解释了Linux中的环境变量函数getenv、putenv、setenv和unsetenv的用法和功能。通过使用这些函数,可以获取、设置和删除环境变量的值。同时给出了相应的函数原型、参数说明和返回值。通过示例代码演示了如何使用getenv函数获取环境变量的值,并打印出来。 ... [详细]
  • 本文介绍了PE文件结构中的导出表的解析方法,包括获取区段头表、遍历查找所在的区段等步骤。通过该方法可以准确地解析PE文件中的导出表信息。 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • 本文介绍了C++中省略号类型和参数个数不确定函数参数的使用方法,并提供了一个范例。通过宏定义的方式,可以方便地处理不定参数的情况。文章中给出了具体的代码实现,并对代码进行了解释和说明。这对于需要处理不定参数的情况的程序员来说,是一个很有用的参考资料。 ... [详细]
  • 本文讨论了使用差分约束系统求解House Man跳跃问题的思路与方法。给定一组不同高度,要求从最低点跳跃到最高点,每次跳跃的距离不超过D,并且不能改变给定的顺序。通过建立差分约束系统,将问题转化为图的建立和查询距离的问题。文章详细介绍了建立约束条件的方法,并使用SPFA算法判环并输出结果。同时还讨论了建边方向和跳跃顺序的关系。 ... [详细]
  • 开发笔记:实验7的文件读写操作
    本文介绍了使用C++的ofstream和ifstream类进行文件读写操作的方法,包括创建文件、写入文件和读取文件的过程。同时还介绍了如何判断文件是否成功打开和关闭文件的方法。通过本文的学习,读者可以了解如何在C++中进行文件读写操作。 ... [详细]
  • 本文介绍了Swing组件的用法,重点讲解了图标接口的定义和创建方法。图标接口用来将图标与各种组件相关联,可以是简单的绘画或使用磁盘上的GIF格式图像。文章详细介绍了图标接口的属性和绘制方法,并给出了一个菱形图标的实现示例。该示例可以配置图标的尺寸、颜色和填充状态。 ... [详细]
  • Android工程师面试准备及设计模式使用场景
    本文介绍了Android工程师面试准备的经验,包括面试流程和重点准备内容。同时,还介绍了建造者模式的使用场景,以及在Android开发中的具体应用。 ... [详细]
author-avatar
w3shuajiang2
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有