输入n,求1+22+333+…+nnn…n。 (记得写注释)
题解一
#include <stdio.h>
int main()
{
int i,j,n,m,s=0;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
m=0;
for(j=1;j<=i;j++)
m=m*10+i;
printf("%d+",m);
s+=m;
}
printf("\b=%d",s);
}
方法二
#include<stdio.h>
#include<math.h>
int main()
{
int m=0, n,i,j,sum=0;
scanf("%d",&n);
for(i=1;i<=n;i++)
for(j=0;j<=i-1;j++)
{
m=i*pow(10,j);
printf("%d+",m);
sum+=m;
}
printf("\b=%d\n",sum);
}
5.一个数如果恰好等于它的因子之和,这个数就称为完数。求1000之内的所有完数。
#include "stdio.h"
main()
{
static int k[10];
int i, j, n, s;
for (j = 2; j<1000; j++) //3
{
n = -1;
s = j;
for (i = 1; i<j; i++)
{
if ((j%i) == 0)
{
n++;
s = s - i;
k[n] = i;
}
}
if (s == 0)
{
printf("%d是一个完数=",j);
for (i = 0; i<n; i++)
printf("%d+",k[i]);
printf("%d\n",k[n]);
}
}
}
#include<stdio.h>
int main()
{
int i,sum,n;
for(n=1;n<=1000;n++)
{
sum=0;
for(i=1;i<n;i++)
{
if(n%i==0)
{
sum=sum+i;
}
}
if(n==sum)
{
printf("%d its factors are ",n);
for(i=1;i<n;i++)
{
if(n%i==0)
{
printf("%d ",i);
}
}
printf("\n");
}
}
return 0;
}
#include <stdio.h>
int main()
{
int i,j,sum;
for (int i = 2; i <= 1000; i++)
{ //从2到1000的数
sum = 0; //因子总和
for (int j = 1; (j * j) <= i; j++)
{ //j做除数,√n复杂度,减少一半的计算量
if (i % j == 0)
{ //可以整除,为其因子
sum = j + (i / j) + sum; //因子之和
}
}
if ((sum - i) == i)
printf("%d\n",i); //因子之和减去其本身(1*i也为其因子)如果等于这个数本身,则为完数
}
}
7.编写程序,从键盘上输入k,计算并输出k以内最大的10(若不够,只求实际个数)个能被13或17整除的自然数之和。
#include <stdio.h>
int main()
{
int k,i,count,s;
count=0;
s=0;
scanf("%d",&k);
while(k>=1&&count<10)
{
if((k%13==0)||(k%17==0))
{
printf("%d+",k);
s=s+k;
count++;
}
k--; //最大的10个 由100开始递减 能保证前十个数最大
}
printf("\b=%d\n",s);
}
.输入正整数n,然后输入n个整数并求出这n个整数的平均值。
#include "stdio.h"
int main()
{
int i,n,k,sum=0;
printf("请输入n:");
scanf("%d", &n);
for(i=0;i<n;i++)
{
scanf("%d",&k);
sum+=k;
}
printf("%.2f\n",1.0*sum/n);
}
9.编写程序计算:s=1+(1+2)+(1+2+3)+…+(1+2+…+n)。
#include <stdio.h>
int main()
{
int i,n,s,h;
s=0;
h=0;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
s+=i;
h+=s;
}
printf("%d\n",h);
}
#include <stdio.h>
int main()
{
int i,j,sum=0,n=0;
scanf("%d",&n);
for (i=1;i<=n;i++)
{
for (j=1;j<=i;j++)
{
sum+=j;
}
}
printf("%d\n",sum);
return 0;
}
*10.输入正整数m,求满足如下条件的最大的n:12+22+32+…+n2≤m。
#include <stdio.h>
int main()
{
int n,s,m;
n=1;
s=0;
scanf("%d",&m);
while(s<=m)
{
s+=n*n;
n++;
}
printf("%d\n",n-2);
return 0;
}
*11.判断输入的n个整数是否有序,如输入1,2,3,则输出有序;若输入1,3,2,则输出无序。
#include<stdio.h>
int main()
{
int t,x,flag=1,n;
n=10; //输入十个数
scanf("%d",&t);
for(int i =1;i<n;i++)
{
scanf("%d",&x);
if(x<t)
{
flag=0;
}
t=x;
}
if(flag==0)
{
printf("无序");
}
else
{
printf("有序");
}
}
12.兔子繁衍问题:著名意大利数学家Fibonacci曾提出一个问题,一对兔子,从出生后第3个月起每一个月都生一对兔子。小兔子长到第3个月后每个月又生一对兔子。按此规律, 假设没有兔子死亡,请问第1个月出生的一对兔子,至少需要繁衍到第几个月时才可达到n 对?程序输入n,输出对应的月份数。
#include <stdio.h>
int main()
{
int a=1,b=1,n,t=1,i=2;//a是第一个数,b是 第二个数,前面直接定义了 ,i定义为二是为后面当n不等于1也就是说 最少一个月过去了。
//t是两个数的转换,用来保存前一个数。
scanf("%d",&n);//n对,就是兔子的数量
if(n==1)//用 一个if来判断如果n=1,就直接输出 。
{
printf("1");
}
else
{
while(n>t)
{
i++;//用来 计数的
t=a+b;
b=a;
a=t;
}
printf("%d",i);
}
return 0;
}
13. 输出65535以内的所有梅森数。是指形如2n-1的正整数,其中指数n是素数,若2n-1也是素数,则称为梅森素数。(循环嵌套)
#include<stdio.h>
#include<math.h>
int main()
{
int n,i,a,b=0,t=0;
for(a=2;a<=16;a++) //2^16=65536
{
b=pow(2,a)-1;
for(i=2;i<b;i++)
{
if(b%i==0)
{
t=1;
break;
}
}
if(t==0)
printf("%d\n",b);
t=0;
}
return 0;
}
14.输入一个正整数n,计算Sum=20+21+22+……2n,不用函数pow。
#include <stdio.h>
int main()
{
int s , t=1;
int i,n;
s=0;
scanf("%d",&n);
for(i = 0; i <= n; i ++)
{
s+=t;
t*=2;
}
printf("%d\n", s);
return 0;
}
15.黑洞数。又称陷阱数,是类具有奇特转换特性的整数。任何一个数字不全相同整数,经有限“重排求差”操作,总会得某一个或一些数,这些数即为黑洞数。经过有限次“重排求差”操作即把组成该数的数字重排后得到的最大数减去重排后得到的最小数,最后总会得到495。如对于三位数297:
三个位上的数从小到大和从大到小各排一次,为279和972,972-279=693
再次重排三个位上的数从小到大和从大到小各排一次,为369和963,963-369=594
再次重排三个位上的数从小到大和从大到小各排一次,为459和954,954-459=495
编程验证,任意输入一个三位数,输出重排过程。
#include <stdio.h>
int main(void) {
int n, a, b, c, t, A, B;
printf("输入一个三位数整数:");
scanf("%d",&n);
do{
/*a, b, c 分别是百位数,十位数,个位数*/
a = n/100;
b = (n%100)/10;
c = (n%10);
/* 百位数,十位数,个位数按照从大到小的顺序重排,以便下一步中求重排后的最大值A和最小值B*/
if(a<b) {
t = a; a = b; b = t;
}
if(a<c) {
t = a; a = c; c = t;
}
if(b<c) {
t = b; b = c; c = t;
}
/*从排后的最大数A与最小数B*/
A = a * 100 + b * 10 + c;
B = c * 100 + b * 10 + a;
/*将最大数与最小数的差,重新赋给变量n,以便做循环判断或下次循环使用*/
n = A - B;
/*输出过程*/
printf("%d - %d = %d\n", A, B, n);
} while(n!=495 && n!=0);
return 0;
}