码迷,mamicode.com
首页 > 其他好文 > 详细

初学者编程编程实战指南

时间:2014-11-08 11:43:22      阅读:229      评论:0      收藏:0      [点我收藏+]

标签:style   blog   io   color   sp   for   div   log   bs   

本文阅读对象,刚学循环的同学

 

 同学A  9:35:14
一个自然数平方的末几位与该数相同时,称该数为同构数。编程求出1~1000中所有的同构数。

 1 #include <stdio.h>
 2 int main()
 3 {
 4     int n;
 5     for(n=1;n<=1000;n++)
 6     {
 7         if((n*n-n)/10!=0&&(n*n-n)%10==0&&n%11!=0)
 8         printf("%d\n",n);
 9     }
10     return 0;
11 }

还有什么条件我想不到…

老师()  9:37:30
是OJ的题目还是书上的

同学A  9:37:40
书上的

老师()  9:39:10
应该是条件错了
if

 

老师()  9:40:42
条件是末几位与该数相同, 你如何保证着一点?
你自己的程序运行出来无法保证“末几位与该数相同”

 

同学A  9:41:20
是的

老师()  9:42:40
想一下,条件应该怎么样

同学A  9:42:56

 

同学B  9:46:56
应该对10或100取余数
大概吧

老师()  9:48:42
是这样意思,A同学明白一点了吗?
比如 5是, 因为(5*5-5)%10==0 为真

老师()  9:49:59
25也是,因为 (25*25-25) % 100==0为真
还有三位数的

 

同学A  9:52:08
但是这样的话会输出10,10应该不是

 

老师()  9:53:09
不会的, 10是两位数,应该满足(10*10-10) % 100==0为真

 

同学A  9:59:18
if(n*n-n)%10==0||(n*n-n)%100==0)这个条件下程序会输出10呀

 

老师()  9:59:45
不是告诉你了,条件写错了
最简单的是写一个多分支的
根据是几位数分别处理

 

同学A  10:00:32
多分支好麻烦
没有更好的办法了吗

 

老师()  10:01:18
先写正确了,再想办法优化才是正道

 

同学A  10:01:30

 

同学B  10:02:54
老师能不能用||来解决?

 

老师()  10:03:29
是可以缩进一条if语句的,自己多想想

 

同学B  10:05:32
编程get

 

老师()  10:05:54
但是要是我来推荐思考方法,我会说先找清晰但是可能不是那么简洁的解法, 然后在此基础上进行简化甚至转换思路

 

同学B  10:06:26
先对 再优化

 

老师()  10:06:37
是的

 

同学A  10:08:01

#include <stdio.h>
int main()
{
    int n;
    for(n=1;n<10;n++)
    {
        if((n*n-n)%10==0)
        printf("%d\n",n);
    }
    for(n=10;n<100;n++)
    {
        if((n*n-n)%100==0)
        printf("%d\n",n);
    }
    for(n=100;n<1000;n++)
    {
        if((n*n-n)%1000==0)
        printf("%d\n",n);
    }
    return 0;
}

老师,现在对了,能不能优化呢

老师()  10:09:20
你这个多分支写得不算好

 

老师()  10:10:22
for(n=1;n<=1000;n++){ if ....else if...}视觉上面更舒服一点

 

同学A  10:11:05
我看这个挺好的……

 

老师()  10:12:01
我们的审美观不同,你这样的话就没有整合的可能

 

同学A  10:12:29
那我再去改

 

老师()  10:13:49
我给一个版本,你再去思考吧
老师()  10:14:56

#include <stdio.h>
int main()
{
    int n;
    for(n = 1; n <= 1000; n++) {
        int t = n * n - n;
        if((n < 10 && t % 10 == 0) || (n < 100 && t % 100 == 0) || (n < 1000 && t % 1000 == 0))
            printf("%d\n", n);
    }
    return 0;
}

 

同学B  10:15:46
对  就是这个

 

老师()  10:16:24
这个利用了||的短路性质,很多同学掌握得不好,可以体会一下

 

同学B  10:17:02
||之间要用括号?

 

同学A  10:17:12
谢谢老师,我再想想

 

老师()  10:17:35
至少逻辑上更清晰,不是吗

 

同学B  10:17:40
     if((n < 10 && t % 10 == 0) || (n < 100 && t % 100 == 0) || (n < 1000 && t % 1000 ))

 

同学A  10:17:47
是的

 

同学B  10:17:48
对哦

 

初学者编程编程实战指南

标签:style   blog   io   color   sp   for   div   log   bs   

原文地址:http://www.cnblogs.com/4bytes/p/4082866.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!