1.完全平方数的判定:
错误写法:
sqrt(n)==(int)(sqrt(n));//错因:浮点数的数值不够精确
正解:
int i; for(i = 10; i <N ; i++) { if(N % i == 0) { if(i * i == N) { flag1=1; } } }
2.统计输入数字中数位上出现过的数字的次数:
(同类型:字符串中出现过的字母)
功能扩增:
(1)打印出每个数字出现的次数
(2)找出出现次数最多的数字(可以同时存在多个)
Tips:其实本质上就是关于数位的问题
数位的基本操作:
1.读出末位的数字:
int n;
n = num%10 ;//取余操纵用于提取末尾数字
2.将末位数字去除得到新的数:
num /= 10 ;//除法操作将末位数字去除
3.将数字存入数组中管理:
int i=0;
int a[100];
while(num>0)//当把所有的数字全部读取并去除时,num==0,跳出循环
{
int n = num%10;
a[i++] = n;
num /= 10;
}
//此时得到的i不要丢了,它的值就是数字的位数(在后面的运算中很重要)
4.读取次数(采用遍历的方法)
int times[10]={0}; //times数组用于统计次数,初始化0一定不要忘记了!
//然后这i==1时即对应了1的次数
int j;
for(j=0;i<i;j++)//遍历数组中的各位数字
{
times[a[j]]++;//出现一次就加一
}
5.找出最多次的:
主要难点是当出现多个相同的最大次数时该怎么办
可以这样操作:
Step1:找出最大的次数
Step2:找出与最大次数相同次数的数
(这种思想也可以在找众数时使用)
int max=0;
for(int i=1;i<10;i++)
{
if(times[max]<times[i])
{
max=i;
}
}//这样就得到了出现最多的那个次数的值
for(int j=0;j<10;j++)
{
if(times[max]==times[j])
{
printf("%d ",j);
}
}//这样就找到了这些数字了
类比一下啊:找字母的
那就是用a[52]桑
哦,如果不区分大小写的话就是a[26]
然后在判断的时候应该这样比较好
int i;
int a[26]={0};
char str[n];
for(i=0;i<n;i++)
{
for(int j=A;j<=Z;j++)
if(c[i]==j || c[i]==(j-32))//大小写一并判断了
{
a[(j-A)]++;//这里的(j-A)很关键,就是把a或A的次数变成了a数组中的第一个元素
//更方便后面的操作
}
}