summation.c
#include <stdio.h>
int main()
{
printf("请输入n:");
float n,summation,i,m=1.0;
scanf("%f",&n);
for(i=1.0;i<=n;i++){
summation+=m/i;
m*=-1;
}
printf("前n项和为%f\n",summation);
return 0;
}
//数列{1/n}的前n项和
break.c
#include <stdio.h>
int main()
{
printf("请输入一个整数");
int x=0;
scanf("%d",&x);
int i=10000000;
for(int a=x;i>=1;){
if(a/i==0){
i/=10;
}
else{
printf("%d\n",a/i);
a=x%i;
}
}
return 0;
}
//将一个整数各位数字分解,正序输出
//当给的整数中包含零时,不成立:当仅仅给一个一定大于需要运算的整数的数时,整数之前的0和整数之内的0没法区分
break1.c
#include <stdio.h>
int main()
{
printf("请输入一个整数:");
int x=0;
scanf("%d",&x);
do{
printf("%d",x%10);
x/=10;
if(x>0){
printf("\n");
}
}while(x>0);
return 0;
}
//普通的逆序拆分
//另一种思路,先将数逆序,然后逆序拆分
break2.c
#include <stdio.h>
int main()
{
printf("请输入一个整数:");
int x=0;
scanf("%d",&x);
int d=0;
do{
d=x%10+d*10;
x/=10;
}while(x>0);
do{
printf("%d",d%10);
d=d/10;
if(d>0){
printf(" ");
}
}while(d>0);
return 0;
}
//对于70000之类的行不通
//出现问题:将整数倒序再拆分,整数末尾的0会消失不见,无法还原
break3.c
#include <stdio.h>
int main()
{
printf("请输入一个整数:");
int x=0;
scanf("%d",&x);
//检测一下有几位数,可以对0特殊处理
int i=1;
int t=x;
while(t>9){
t/=10;
i*=10;
}
do{
printf("%d\n",x/i);
x%=i;
i/=10;
}while(i>=1);
return 0;
}
//搞清楚几位数和乘几个十之间的关系
max.c
#include <stdio.h>
int main()
{
printf("请输入两个整数:");
int a=0,b=0,max=0,min=0;
scanf("%d %d",&a,&b);
if(a<b){
min=a;
}
else{
min=b;
}
for(int i=1;i<=min;i++){
if(a%i+b%i==0){
max=i;
}
}
printf("最大公约数为%d",max);
return 0;
}
//求最大公约数,挨个列举
gcd.c
#include <stdio.h>
int main()
{
printf("请输入两个整数:");
int a,b,t;
scanf("%d %d",&a,&b);
while(b>0){
t=a%b;
a=b;
b=t;
printf("a=%d,b=%d,t=%d\n",a,b,t);
}
printf("%d\n",a);
return 0;
}
//辗转相除法
//a,b的值可以变化,后面不需要用到a,b原来的值
random1.c
#include <stdio.h>
int main()
{
printf("请输入x(x<6):");
int x=0;
scanf("%d",&x);
int y=x+1,z=x+2,w=x+3,n=0;
do{
printf("%d ",x*100+y*10+z);
printf("%d ",x*100+y*10+w);
printf("%d ",x*100+z*10+y);
printf("%d ",x*100+z*10+w);
printf("%d ",x*100+w*10+y);
printf("%d\n",x*100+w*10+z);
x=y;
y=z;
z=w;
w=x-1;
n++;
}while(n<4);
return 0;
}
//给定不超过6的整数x
//x+1,x+2,x+3,x+4
//一行六个数,共输出四行
//手动进行内层循环
random2.c
#include <stdio.h>
int main()
{
printf("请输入一个整数x(x<=6):");
int x=0;
scanf("%d",&x);
int i,j,k;
i=x;
int cent=0;
while(i<=x+3){
j=x;
while(j<=x+3){
k=x;
while(k<=x+3){
if(i!=j){
if(j!=k){
printf("%d%d%d",i,j,k);
cent++;
if(cent==6){
printf("\n");
cent=0;
}
else{
printf(" ");
}
}
}
k++;
}
j++;
}
i++;
}
}
//连续的if的使用
//while的嵌套
//无需固定某个数的值,只需要让他们在x~x+3之间变化,就可以组成由四个数中三个不重复数字组成的三位数
//一直都要用到初始的x的值:定义其他变量等于x,让其他变量来变
random3.c
#include <stdio.h>
int main()
{
printf("请输入一个整数x(x<=6):");
int x=0;
scanf("%d",&x);
int i,j,k;
i=x;
int cent=0;
while(i<=x+3){
j=x;
while(j<=x+3){
k=x;
while(k<=x+3){
if(i!=j&&j!=k&&i!=k){
printf("%d%d%d",i,j,k);
cent++;
if(cent==6){
printf("\n");
cent=0;
}
else{
printf(" ");
}
}
k++;
}
j++;
}
i++;
}
return 0;
}
//if的新使用方法
//当有多个条件时,不必嵌套,只需要在多个条件之间加“&&”即可
random4.c
#include <stdio.h>
int main()
{
printf("请输入一个整数x(x<=6):");
int x=0;
scanf("%d",&x);
int i,j,k;
int cent=0;
for(i=x;i<=x+3;i++){
for(j=x;j<=x+3;j++){
for(k=x;k<=x+3;k++){
if(i!=j&&i!=k&&j!=k){
printf("%d%d%d",i,j,k);
cent++;
if(cent==6){
printf("\n");
cent=0;
}
else{
printf(" ");
}
}
}
}
}
return 0;
}
//让前五个数之后输出空格,最后一个数之后输出回车的方法
Nar.c
#include <stdio.h>
int main()
{
printf("请输入位数N(N>=3:");
int N=0;
scanf("%d",&N);
int i=1;
for(; N>1 ; N--){
i *= 10;
}
printf("i=%d\n",i);
//先检测一下N
//可用i分离最左边的一位数
//注意需要乘几个十:n位数只需乘n-1个10
int a=1;
//i不能变,i要作为是否达到上限(10*i)的判断条件
//需要t=i不断加一,试所有N位数
//a可在任意地方定义
//当选择使用循环的嵌套时,定义变量时一定注意判断在哪里定义
for(int t=i; t<10*i; t++){
int j=i;
int d=t;
int b=0;
//想好需要几个变量,每个变量干什么
//t在此循环中需要不断加一,在循环内部不能变,需要让d=t不断缩小位数,进行分离
//i不能变,故在此循环中让j代替i,应在内循环外,外循环内定义(因为内循环中j需要不断改变,但每次内循环开始时的j应该是一样的)
//还需要一个变量保存分离之后的运算结果,再与t比较,也需要定义在内循环外,外循环内
for(; j>0 ; j/=10){
a = d / j;
b += a * a * a;
d = d % j;
//仅对三位数适用
}
if(b==t){
printf("有一个水仙花数是%d\n",b);
}
}
return 0;
}
Nar2.c
#include <stdio.h>
int main()
{
printf("请输入位数n:");
int n = 0, first = 1;
scanf("%d", &n);
int j = n;
while(j > 1){
first *= 10;
j --;
}
//printf("n = %d \n , first = %d\n" , n , first);
//可用printf来检验是否正确
int i = first;
while ( i < first * 10){
int t = i;
int sum = 0;
//printf("t=%d\n",t);
while(t>0)
{
int d = t % 10;
t /= 10;
int k = n;
int m = 1;
while ( k > 0 ){
m *= d;
//此处不能用d*=d,因为每次*d之后d的值会变化,不再是原来的d
k -- ;
}
sum = sum + m;
//printf("sum=%d\n",sum);
}
if( sum == i){
printf("%d\n",i);
}
i++;
}
}
Nar3.c
#include <stdio.h>
int main()
{
int m , n;
scanf("%d %d", &m , &n);
int sum = 0;
int num = 0;
m++;
while(m < n){
int b=1;
int sum = 0;
int i = m;
while(b > 0){
b = i % 10;
sum = sum + b * b * b;
i = i / 10;
}
if(sum == m){
if(num==0)
{
printf("%d", m);
num++;
}
else
{
printf(" %d",m);
num++;
}
}
m++;
}
if( num == 0){
printf("no");
}
return 0;
}
一道题……水仙花数换个方式应用,只针对三位数
但是提交之后总是显示不通过……网上的解析看不太懂,等再学一段时间再回来看吧