我的天空,我的世界

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
1.把1至2009这2009个自然数依次写下来得到一个多位数123456789.....2009,这个多位数除以9余数是多少?
代码
 1 class Program
 2     {
 3         static void Main(string[] args)
 4         {
 5             int number=0;
 6             ArrayList stringArray=new ArrayList () ;
 7             string numberstring = string.Empty ;
 8             for (int i = 1; i <= 2009; i++)
 9             {   //将数字头尾相接连成字符串
10                 numberstring=numberstring+i.ToString();
11             }
12             //将字符串分割成字符数组
13             char[] charArray=numberstring.ToCharArray();
14             foreach (char charnumber in charArray)
15             {
16                //为了使用Convert.ToInt32方法,将字符数组中每个字符转成字符串类型
17                 stringArray.Add(charnumber.ToString());
18             }
19             foreach (string stringnumber in stringArray)
20             {  //将数字的每一位的数字相加
21                 number = number + Convert.ToInt32(stringnumber);                            
22             }
23             //数字的每一位的数字相加后的总数除9和原数字除9,余数相等
24             Console.WriteLine(number % 9);
25         }
26     }

参考《有余数的除法》

对于任意一个整数除以一个自然数,一定存在唯一确定的商和余数,使被除数=除数×商+余数(0≤余数<除数)。也就是说,整数a除以自然数b,一定存在唯一确定的qr,使a=bqr0rb)成立.  我们把对于已知整数a和自然数b,求qr,使a=bqr0rb)成立的运算叫做有余数的除法,或称带余除法.记为a÷b=q(余r)或a÷b=qr  读作“a除以bqr”,其中a叫做被除数,b叫做除数,q叫做不完全商(简称商),r叫做余数.
  例如5÷7=0(余5),6÷6=1(余0),29÷5=5(余4).
  解决有关带余问题时常用到以下结论:

  (1)被除数与余数的差能被除数整除.即如果a÷b=q(余r),那么b|(a-r).

  因为a÷b=q(余r),有a=bqr,从而a-r=bq

  所以b|(a-r).

  例如39÷5=7(余4),有395×74,从而39-4=5×7,所以5|(39-4

  (2)两个数分别除以某一自然数,如果所得的余数相等,那么这两个数的差一定能被这个自然数整除.即如果a1÷b=q1(余r),a2÷b=q2(余r),那么b|(a1-a2),其中a1a2

  因为a1÷b=q1(余r),a2÷b=q2(r),有a1=bq1+ra2=bq2r,从而a1-a2=bqlr-bq2r=bq1-q2),所以b(a1-a2)

  例如,22÷3=7(余1),28÷3=9(余1),有22=3×7128=3×91,从而28-22=3×9-3×73×(9-7),所以3|(28-22).

  (3)如果两个数a1a2除以同一个自然数b所得的余数分别为r1r2r1r2的和除以b的余数是r,那么这两个数a1a2的和除以b的余数也是r

  例如,18除以5的余数是324除以5的余数是4,那么(18+24)除以5的余数一定等于(34)除以5的余数(余2).

  (4)被除数和除数同时扩大(或缩小)相同的倍数,商不变,余数的也随着扩大(或缩小)相同的倍数.即如果a÷b=q(余r),那么(am)÷(bm=q(余rm),(a÷m))÷(b÷m=q(余r÷m)(其中mamb).

  例如,14÷6=2(余2),那么(14×8)÷(6×8)=2(余2×8),(14÷2)÷(6÷2=2(余2÷2).

  下面讨论有关带余除法的问题.

1 节日的街上挂起了一串串的彩灯,从第一盏开始,按照5盏红灯,4盏黄灯,3盏绿灯,2盏蓝灯的顺序重复地排下去,问第1996盏灯是什么颜色?

分析:因为彩灯是按照5盏红灯,4盏黄灯,3盏绿灯,2盏蓝灯的顺序重复地排下去,要求第1996盏灯是什么颜色,只要用1996除以5432的余数是几,就可判断第1996盏灯是什么颜色了.

解:1996÷(5432=1424

  所以第1996盏灯是红色.

2 119961996个自然数依次写下来,得一多位数123456789101112……199419951996,试求这一多位数除以9的余数.

分析:从前面我们学习被9整除的特征知道,一个数的各个数位上的数字之和能被9整除,这个数必能被9整除.所以一个数除以9的余数,与这个数的各个数位上的数字之和除以9的余数正好相等.这样问题转化为求119961996个自然数中所有数字之和是多少,然后用这个和除以9所得的余数即为所求.

解:019992000个整数一头一尾分成如下1000组:(01999),(l1998),(21997),(31996),……,(9971002),(9981001),(9991000).以上每一组的两数之和都是1999,并且每一组两数相加时都不进位,这样119991999个自然数的所有数字之和等于:

  (199+9)×1000=28000

  而199719993个自然数所有数字之和为:

  1×3+9×3+9×37+8+9=81

  所以从119961996个自然所有数字之和为:

  28000-81=27919

  27919÷9=31021

  所以123456789……199419951996除以9的余数是1

  另外:因为依次写出的任意连续9个自然数所组成的位数一定能被9整除.而11996共有1996个连续的自然数,且1996÷9=2217,最后7个自然数为199019911992,…1996,这7个数的所有数字之和为:

  1×79×7+9×7+123+…+6=154

  154÷9=171

  所以123456789……199419951996这个多位数被9除余1

  为什么依次写出任意连续9个自然数所组成的多位数一定能被9整除呢?这是因为任意连续的9个自然数各数位上的数字之和除以9的余数,必是012,…,789个数,而各数位上的数字之和除以9的余数,就等于这9个数之和0+1+2++8除以9的余数,由于012+…+8=36能被9整除,所以任意连续的9个自然数各数位上的数字之和必能被9整除,因此任意连续9个自然数所组成的多位数必能被9整除.

 

2.魔术矩阵:一个n*n的矩阵,其中n必须为奇数,将1至n2的整数放入矩阵,使矩阵各列各行以及对角线的元素值总和均相同

魔术矩阵
 1 using System;
 2 
 3 namespace ConsoleTest
 4 {
 5     class MagicM
 6     {
 7         int[,] mm;
 8         static void Main(string[] args)
 9         {
10             do
11             {
12                 MagicM myClass1 = new MagicM();
13                 int n;
14                 Console.WriteLine("请输入矩阵大小:");
15                 n = int.Parse(Console.ReadLine());
16                 if (n==0)
17                 {
18                     Console.WriteLine("请按Enter离开");
19                     break;
20                 }
21                 if (n%2==0)
22                 {
23                     Console.WriteLine("请输入奇数:");
24                     continue;
25                 }
26                 myClass1.mm = new int[n, n];
27                 myClass1.AssingValue(n);
28                 myClass1.PrintOut(n);
29                 Console.WriteLine("\n");
30             } while (true);
31             Console.ReadLine();
32         }
33 
34         void AssingValue(int n)
35         {
36             int assingValue = 1;//将要填入的值
37             int p = n - 1;//row,column边界值
38             int column = p / 2;//中间点的位置
39             int row = 0;
40             //初始化mm数组
41             for (int i = 0; i < n; i++)
42             {
43                 for (int j = 0; j < n; j++)
44                 { mm[i, j] = 0; }
45             }
46             //“1”一律放在第一行中间位置
47             mm[row, column] = assingValue;
48             do
49             {
50                 assingValue++;
51                 column--;
52                 row--;
53                 //第二个数放在前一个数的左上角。
54                 //如果行超出范围,就放到同一列的最后。
55                 //如果列超出范围,就放到同一行的最后。
56                 //如果行和列同时超出范围或左上角已有数字,则放在正下方
57                 if (column<0 & row<0)
58                 {
59                     row += 2;
60                     column += 1;
61                 }
62                 else
63                 {
64                     if (column<0)column = p;
65                     if (row < 0) row = p;
66                 }
67                 if (mm[row, column] != 0)
68                 {
69                     column += 1;
70                     row += 2;
71                 }
72                 mm[row, column] = assingValue;
73             } while (assingValue<n*n);
74         }
75         void PrintOut(int n)
76         {
77             for (int i = 0; i < n; i++)
78             {
79                 Console.WriteLine();
80                 for (int j = 0; j < n; j++)
81                 { Console.Write(mm[i, j] + "\t"); }
82             }
83         }
84     }
85 }
86 

 3.递归:递归的效率比循环高

反转字符串
 class ReverseWord
    {
        
static void Main(string[] args)
        {
            
string strResult;
            ReverseWord myURec 
= new ReverseWord();
            strResult 
= myURec.DoStrRev("This is a teststring");
            Console.WriteLine(
"反转后输出为{0}",strResult );
            Console.ReadLine();
        }
        
string DoStrRev(string strTest)
        {
            
if (strTest.Length ==1return strTest;
            
string strResult=strTest.Substring (strTest .Length -1,1);
            strResult 
+=DoStrRev (strTest.Substring (0,strTest.Length-1));
            
return strResult ;
        }
    }

  

阶乘运算
class UsingRecursive
    {
        
static void Main(string[] args)
        {
            
int intResult;
            UsingRecursive myURec 
= new UsingRecursive();
            intResult 
= myURec.DoFactorial(10);
            Console.WriteLine(
"10的阶乘等于{0}",intResult);
        }
        
int DoFactorial(int p)
        {
            
int result = 0;
            
if (p == 1return 1;
            result 
= DoFactorial(p - 1* p;
            
return result;
        }
            
    }

 

 

posted on 2009-12-02 14:23  eaglegrace  阅读(1021)  评论(0编辑  收藏  举报