周内收获
一.统计某类完全平方数
本题要求实现一个函数,判断任一给定整数N是否满足条件:它是完全平方数,又至少有两位数字相同,如144、676等。
函数接口定义:
int IsTheNumber ( const int N );
其中N是用户传入的参数。如果N满足条件,则该函数必须返回1,否则返回0。
裁判测试程序样例:
include <stdio.h>
include <math.h>
int IsTheNumber ( const int N );
int main()
{
int n1, n2, i, cnt;
scanf("%d %d", &n1, &n2);
cnt = 0;
for ( i=n1; i<=n2; i++ ) {
if ( IsTheNumber(i) )
cnt++;
}
printf("cnt = %d\n", cnt);
return 0;
}
/* 你的代码将被嵌在这里 /
思路说明:1. N为完全平方数的证明条件即为将N开根号,并将其定义为int型,如果N为其平方乘积,则N为完全平方数;
2.判断N中是否有至少有两个数相同的证明条件:当例子为三位数时,利用数学知识求得每个位的数字,并以此判断是否存在两个数相同;当例子是四位数时,百位数数字不能通过三位数数字求法求得,故重新计算并覆盖,最终判断N中是否至少有两个数字相同。
源程序:int IsTheNumber(const int N){
int flag=0;
int a,b,c,d;
int m=sqrt(N);
a=N/100;//百位数
b=(N%100)/10;//十位数
c=N%10;//个位数
d=N/1000;//千位数
if(d0&&a!=0){
if(ab||bc||ac) flag=1;
else
flag=0;
if(N!=mm) flag=0;
}
else if(d!=0){
a=(N%1000)/100;
if(ab||bc||ac||ad||bd||cd) flag=1;
else
flag=0;
if(N!=mm) flag=0;
}
else if(N<=0) flag=0;
return flag;
}
然而,这种数学思想只能针对一部分的例子,不能解决所有问题,而且编码冗长麻烦
不如采取编程思想
int IsTheNumber(const int N){
int a[10]={0};
int n=N,l;
int m=sqrt(N);
if(N==mm){
while(n){
l=n%10;
a[l]++;
n=n/10;}
for(int i=0;i<10;i++)
if(a[i]>1)return 1;
}
return 0;
}
这样代码不仅简洁了很多,还能适用于更多的情况。
二.龟兔赛跑
乌龟与兔子进行赛跑,跑场是一个矩型跑道,跑道边可以随地进行休息。乌龟每分钟可以前进3米,兔子每分钟前进9米;兔子嫌乌龟跑得慢,觉得肯定能跑赢乌龟,于是,每跑10分钟回头看一下乌龟,若发现自己超过乌龟,就在路边休息,每次休息30分钟,否则继续跑10分钟;而乌龟非常努力,一直跑,不休息。假定乌龟与兔子在同一起点同一时刻开始起跑,请问T分钟后乌龟和兔子谁跑得快?
输入格式:
输入在一行中给出比赛时间T(分钟)。
输出格式:
在一行中输出比赛的结果:乌龟赢输出@@,兔子赢输出_,平局则输出--;后跟1空格,再输出胜利者跑完的距离。
源代码:#include
using namespace std;
int main(){
int T;
int a1=0,a2=0;//a1兔子跑过的距离,a2乌龟跑过的距离
int sign=0;//sign可以表示兔子的状态(sign=0兔子在奔跑,不等于0就在休息)
cin>>T;
for(int i=1;i<=T;i++){
a2=a2+3;//要实时比较
if(sign0){
a1=a1+9;
}
else{
sign=sign-1;
}
if(i%100&&sign0){
if(a1>a2){sign=30;}
}
}
if(a1>a2){cout<<"_ "<<a1;}
else if(a2>a1){cout<<"@_@ "<<a2;}
else if(a1a2){cout<<"-_- "<<a1;}
}
写后感想:本题一定要注意兔子回头看时,要实时比较乌龟走的距离,而不是单纯地算乌龟走的总距离。但是我栽坑的地方在于兔子走的距离的计算,这也应该实时计算,单纯靠数学计算反而会更复杂。充分利用sign来判断兔子的状态(奔跑还是休息)和for循环,才能更好地解决题目。
三.C++巩固
1.if(条件){执行代码}
else{}//不满足if执行什么
2.if(条件){执行代码}
else if(条件){执行代码}
else if(条件){执行代码}//多条件
3.类和对象的定义及简单应用
a.重载函数中编译根据参数表进行选择
c.不要使用重载函数来描述毫无相干的函数
d.构造函数重载将会给初始化带来多种方式
e.重载函数中允许使用默认参数
f.对定义重载函数的下列要求中,要求参数的个数不同,要求参数中至少有一个类型不同,要求参数个数相同时,参数类型不同。但不要求返回值不同
下周目标
学习java编程,理解java中基础的编程思想。
继续C语言和C++的学习。