问题一:爱因斯坦阶梯问题
爱因斯坦阶梯问题:有一长阶梯,若每步上2阶,则最后剩1阶,若每步上3阶,最后剩两阶;
若每步上5阶,最后剩4阶;若每步上6阶,最后剩5阶;只有每步上7阶,最后刚好一阶不剩
问题:一共有多上阶?
方法一:(最简单的方式)
代码如下:
#include <stdio.h>
#include <stdlib.h>
/* run this program using the console pauser or add your own getch, system("pause") or input loop
思考:这个问题给人的第一感觉就是取余,因为题干相当于告诉我们余数;
问题难点就是这个阶梯的范围我们怎样赋予 */
//范围确定最简单的方法就是先自己确定一范围;
int main(int argc, char *argv[]) {
int n;
for(n=0;n<=1000;n++){
if((n%2==1)&&(n%3==2)&&(n%5==4)&&(n%6==5)&&(n%7==0))
break;
}
printf("该阶梯数为:%d",n);
return 0;
}
方法二:
代码如下
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]) {
int i,j,m=0;
int n;
for(i=1;i<=100;i++){
n=7;
n*=i;
if((n%2==1)&&(n%3==2)&&(n%5==4)&&(n%6==5)){
m=1;
break;
}
}
if(m=1){
printf("该阶梯的阶数为:%d",n);
} else{
printf("该阶梯数不再该范围内,重新确定;");
}
return 0;
}
运行结果:
问题一感觉不是一道含金量较高的题;
问题二:寻找1000内的完全数;
完全数;一个数的所有因子之和等于它的本身,则该数被称作完全数;
#include <stdio.h>
#include <stdlib.h>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
void wqs(int);
int main(int argc, char *argv[]) {
//完全数;一个数的所有因子之和等于它的本身,则该数被称作完全数;
//因子概念:包括1,但是不包括本身;
//目标:求出1000以内的所有完全数;
//思考:1,写一个方法:该方法实现求出所有的因子,并且将这因子累加存入一变量当中;
// 2,循环2:从1开始,依次循环到1000,判断完全数;
int i;
printf("1000以内的完全数是:");
for(i=1;i<=1000;i++){
wqs(i);
}
return 0;
}
void wqs(int n){
int sum=0;
int i;
for(i=1;i<n;i++){
if(n%i==0){
sum+=i;
}
}
if(sum==n){
printf("%d ",n);
}
}
运行结果: