题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个 第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下 的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。
/*
采取逆向思维的方法,从后往前推断。
x1=x
x2=(x1/2)-1
x3=(x2/2)-1
....
x9=(x8/2)-1
x10=1
x10=(x9/2)-1
<==>
x9=(x10+1)*2
y=(x+1)*2
x=y
*/
#include<stdio.h>
int main()
{
int x=1,y=0,day;
for(day=1;day<=9;day++)
{
y=(x+1)*2;
x=y;
}
printf("%d",y);
return 0;
}
题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?
#include<stdio.h>
int main()
{
float s=100; //第一次落地时的距离
float h=100;
int i;
h=h/2; //第一次反弹的高度
for(i=2;i<=10;i++) //循环从第二次到第10次
{
s=s+h*2; //总距离=上一次的距离+上一次反弹高度*2
h=h/2; //高度=上一次高度/2
}
printf("s=%f,h=%f\n",s,h);
return 0;
}
1到20的阶层
#include<stdio.h>
int main()
{
double i,j,sum,a=0;
for(i=1;i<=20;i++)
{
sum=1;
for(j=1;j<=i;j++)
{
sum=sum*j;
}
a=a+sum;
}
printf("%lf",a);
}
https://blog.siriyang.cn/posts/20200310191333id.html
//判断素数
/*
输入一个数n,让他依次除以i(i从2到n-1),如果能被其中任意一个数整除,就不是素数
方法1: 如果能被其中任意一个数整除,就break跳出,此时的i肯定小于n,
因为循环次数未达到n次,如果n不能被任何一个数整除,就不会执行break,循环次数就会达到n次
(虽然最后一次判断是i<n,但是,此次循环过后还要i++),所以如果i==n,那就是素数
即:小于n就不是素数,否则就是素数
#include<stdio.h>
int main()
{
int n,i;
printf("输入一个数:\n");
scanf("%d",&n);
for(i=2;i<n;i++) //i取不到1和n
if(n%i==0)
break;
if(i<n) //i的次数未达到n次
printf("%d不是素数\n",n);
else //实际上刚好是i==n
printf("%d是素数\n",n);
return 0;
}
*/
/*
程序改进,其实n不必被 '从2到n-1' 的每个数来除,只需被 '从2到(n-1)/2' 的每个数来除即可,
甚至只需被 '从2到根下n' 的整数来除即可(根下n * 根下n = n) ,注意此时的i可以取到根下n
sqrt是求平方根的函数,参数为双精度,但如果是整型会自动转换为双精度
#include<stdio.h>
#include<math.h>
int main()
{
int n,i,k; //定义k,存放根下n
printf("输入一个数:\n");
scanf("%d",&n);
k=sqrt(n); //双精度型数赋值给了k,又自动转换为了整型
for(i=2;i<=k;i++) //此时的i可以取到n
if(n%i==0)
break;
if(i<=k) //“=”说明可能是被最后一个数整除的
printf("%d不是素数\n",n);
else //如果最后一个数也不能整除,那就i++,所以此时的i一定大于k,且i=k+1
printf("%d是素数\n",n);
return 0;
}
*/
/*
方法二:预先定义一个标志变量,如果是素数赋值为1,如果不是素数赋值为2,最后判断这个变量的值是否为真
#include<stdio.h>
#include<math.h>
int main()
{
int n,i,k,flag=1; //先定义flag为1
printf("输入一个数:\n");
scanf("%d",&n);
k=sqrt(n);
for(i=2;i<=k;i++)
if(n%i==0)
{
flag=0; //如果能被整除,就为0,即下面的条件为假,不是素数
break; //并且停止后续判断
}
if(flag)
printf("%d是素数\n",n);
else
printf("%d不是素数\n",n);
return 0;
}
*/
//求100-200之间的素数
/*
#include<stdio.h>
#include<math.h>
int main()
{
int i,j,k,flag;
for(i=101;i<=200;i++) //也可以i=i+2,因为偶数都不是素数,所以只需要对奇数进行判断即可
{
flag=1;
k=sqrt(i);
for(j=2;j<=k;j++)
{
if(i%j==0)
{
flag=0;
break;
}
}
if(flag)
printf("%d ",i);
}
return 0;
}
*/
//译密码
/*
#include<stdio.h>
int main()
{
char c;
c=getchar(); //输入字符
while(c!='\n')
{
if((c>='A'&&c<='Z')||(c>='a'&&c<='z')) //如果是字母
{
if((c>='A'&&c<='V')||(c>='a'&&c<='v'))
c=c+4;
else
c=c+4-26;
}
printf("%c",c); //输出字符
c=getchar(); //输入下一个字符
}
printf("\n");
return 0;
}
*/
#include<stdio.h>
int main()
{
char c;
while((c=getchar())!='\n') //前后两个读入字符合并成一个
{
if((c>='A'&&c<='Z')||(c>='a'&&c<='z'))
{
c=c+4;
if((c>='Z'&&c<='Z'+4)||(c>='z'))
c=c-26;
}
printf("%c",c);
}
printf("\n");
return 0;
}
/*
题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。
质数就是除去他自己和1不能被其他的数整除。
合数与质数恰恰相反。 如果两个数只有公约数1那么这两个数就是互质数。
把一个合数用质因数相乘的形式表示出来叫做分解质因数。
例子:12的分解质因数,可以有以下几种12=2x2x3=4x3=1x12=2x6
其中1,2,3,4,6,12都可以说是12的因数,即相乘的几个数等于一个自然数,那么这几个数就是这个自然数的因数。
2、3、4中2和3是质数,就是质因数,4不是质数。
程序分析:对n进行分解质因数,应先找到一个最小的质数i,然后按下述步骤完成:
(1)如果这个质数恰等于(小于的时候,继续执行循环)n,则说明分解质因数的过程已经结束,另外 打印出即可。
(2)但n能被i整除,则应打印出i的值,并用n除以i的商,作为新的正整数n,重复执行第二步。
(3)如果n不能被i整除,则用i+1作为i的值,重复执行第一步。
*/
#include<stdio.h>
main()
{
int i,n;
printf("输入一个整数:\n");
scanf("%d",&n);
printf("%d=",n);
for(i=2;i<=n;i++) //可以取到n,因为n一直在变
{
while(n%i==0) //当n能够被i整除时
{
printf("%d",i); //输出i
n=n/i; //并且把n除以i的商,当作新的数
if(n!=1) //最后一个数的商一定为1,所以当不等于1时,输出乘法号
printf("*");
}
}
printf("\n");
return 0;
}
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://www.cnblogs.com/wzgwzg/p/16750629.html
内容来源于网络,如有侵权,请联系作者删除!