程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 問題四十八: 2011年11月02日是一個回文日:2011 1102,我還記得我和2011級的同學在這一天一起做這個題的

問題四十八: 2011年11月02日是一個回文日:2011 1102,我還記得我和2011級的同學在這一天一起做這個題的

編輯:關於C語言

[plain]
/* 程序頭部注釋開始(為避免提交博文中遇到的問題,將用於表明注釋的斜槓刪除了)      
* 程序的版權和版本聲明部分      
* All rights reserved.      
* 文件名稱: txt.c      
* 作    者: liuyongshui      
* 問    題:  2011年11月02日是一個回文日:2011 1102,我還記得我和2011級的同學在這一天一起做這個題的時候! 
             請列出近80還有多少個回文日 
  
* 完成日期: 2013 年4 月14日      
* 版 本 號: V1.0      
*/     
 
#include <stdio.h> 
 
const int Day[13]={0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; 
int CheckYear(int year);   //檢測是否為閏年或平年 
int CompareNum(int num1[], int num2[]);   // 比較是否為回文日 
 
int main() 
{     
      int i; 
      int num=1;       //計數 
      int sign=0;      //標記 
      int flag;         
      int mark; 
      int j=0; 
      int l=0; 
      int m=0; 
      int n; 
      int year[4]={0}; 
      int monthday[4]={0}; 
 
      for(i=2011; i<=2091; i++)    //近80年 
      {    
          flag=i;    //此處的用flag替代i,因為下面flag=flag/10語句會改邊flag,如果不替換,會出錯的。 
 
          for(j=0; j<4; j++)   //把年的每一位放入數組year 
          { 
             year[j]=flag%10;     
             flag=flag/10; 
          } 
          for(l=1; l<=12; l++)  
          {    
              mark=l;    // 也是替代l 
 
              for(n=1; n<=Day[l]; n++) 
              {    
                  m=0;          //每執行一次,就把m賦為0 
                  sign=0;      //每執行一次,就把sign賦為1 
 
                  if(n<10)       // (n<10) 
                  { 
                      monthday[m++]=n;   
                      monthday[m++]=0; 
                  } 
                  else     //取第幾天(>=10)的每一位(如 10 ,就取 1 和 0) 
                  { 
                      monthday[m++]=n%10;   //取每一位 
                      monthday[m]=n/10%10; 
                  } 
 
                 if(l==2 && CheckYear(i))    //若果是閏年1 且為二月 就加一。 
                    { 
                     monthday[0]+=1;              
                    } 
 
                 if(l<10)   //取第幾月(>=10)的每一位(如 10 ,就取 1 和 0) 
                 {   
                     m=2;    //讓從m=2開始賦值 
 
                     monthday[m++]=l;       //取每一位 
                     monthday[m++]=0; 
                  } 
                  else      // (n<10) 
                  {    
                      m=2;    //讓從m=2開始賦值 
 
                      monthday[m++]=mark%10;        //取每一位 
                      monthday[m]=mark/10%10; 
                  } 
               
                  if(CompareNum(year, monthday))     // 比較是否為回文日,若是真 
                  {     
                       if(l==2 && CheckYear(i) )     //若果是閏年1 且為二月 就加一 
                       {    
                           sign=1;           //是回文日sign賦為1 
                           printf("第%d個 %5d %5d %5d 是回文日.", num++, i, l, n+1);     
                       } 
                       else  
                       {    
                           sign=1;          //是回文日sign賦為1 
                           printf("第%d個 %5d %5d %5d 是回文日.", num++, i, l, n); 
                       } 
                  } 
                  
                  if(sign==1)  //若果為真,即有回文日 
                  { 
                      printf("\n"); 
                  } 
              } 
 
          } 
 
      } 
       
      return 0; 

 
 
//函數申明 
int CheckYear(int year) 

    if((year%100 !=0 && year%4 ==0) || (year%400 ==0))   //若符合條件,為閏年,返回1 
    { 
         return 1;          
    } 
    else    
    { 
         return 0; 
    } 

 
int CompareNum(int num1[], int num2[]) 
{     
     int i; 
     int j=3; 
 
     for(i=0, j=3; i<4, j>=0; i++, j--) 
     { 
         if(num1[i]!=num2[j])    //num1從開始的每一位與num2從最後一位往前比較,若不等返回0 
         { 
            return 0; 
         } 
     } 
     return 1; 

/* 程序頭部注釋開始(為避免提交博文中遇到的問題,將用於表明注釋的斜槓刪除了)    
* 程序的版權和版本聲明部分    
* All rights reserved.    
* 文件名稱: txt.c    
* 作    者: liuyongshui    
* 問    題:  2011年11月02日是一個回文日:2011 1102,我還記得我和2011級的同學在這一天一起做這個題的時候!
             請列出近80還有多少個回文日

* 完成日期: 2013 年4 月14日    
* 版 本 號: V1.0    
*/   

#include <stdio.h>

const int Day[13]={0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
int CheckYear(int year);   //檢測是否為閏年或平年
int CompareNum(int num1[], int num2[]);   // 比較是否為回文日

int main()
{   
   int i;
   int num=1;       //計數
   int sign=0;      //標記
   int flag;       
   int mark;
   int j=0;
   int l=0;
   int m=0;
   int n;
   int year[4]={0};
   int monthday[4]={0};

   for(i=2011; i<=2091; i++)    //近80年
   {  
    flag=i;    //此處的用flag替代i,因為下面flag=flag/10語句會改邊flag,如果不替換,會出錯的。

       for(j=0; j<4; j++)   //把年的每一位放入數組year
    {
       year[j]=flag%10;   
    flag=flag/10;
    }
          for(l=1; l<=12; l++)
    {  
     mark=l;    // 也是替代l

     for(n=1; n<=Day[l]; n++)
     {  
      m=0;          //每執行一次,就把m賦為0
      sign=0;      //每執行一次,就把sign賦為1

      if(n<10)       // (n<10)
      {
          monthday[m++]=n; 
       monthday[m++]=0;
      }
         else     //取第幾天(>=10)的每一位(如 10 ,就取 1 和 0)
      {
             monthday[m++]=n%10;   //取每一位
             monthday[m]=n/10%10;
      }

                 if(l==2 && CheckYear(i))    //若果是閏年1 且為二月 就加一。
     {
            monthday[0]+=1;            
     }

           if(l<10)   //取第幾月(>=10)的每一位(如 10 ,就取 1 和 0)
     { 
      m=2;    //讓從m=2開始賦值

      monthday[m++]=l;       //取每一位
      monthday[m++]=0;
      }
      else      // (n<10)
      {  
       m=2;    //讓從m=2開始賦值

       monthday[m++]=mark%10;        //取每一位
       monthday[m]=mark/10%10;
      }
    
      if(CompareNum(year, monthday))     // 比較是否為回文日,若是真
      {   
        if(l==2 && CheckYear(i) )     //若果是閏年1 且為二月 就加一
        {  
         sign=1;           //是回文日sign賦為1
         printf("第%d個 %5d %5d %5d 是回文日.", num++, i, l, n+1);   
        }
        else
        {  
         sign=1;          //是回文日sign賦為1
         printf("第%d個 %5d %5d %5d 是回文日.", num++, i, l, n);
        }
      }
    
      if(sign==1)  //若果為真,即有回文日
      {
       printf("\n");
      }
     }

    }

   }
     
      return 0;
}


//函數申明
int CheckYear(int year)
{
    if((year%100 !=0 && year%4 ==0) || (year%400 ==0))   //若符合條件,為閏年,返回1
 {
      return 1;        
 }
 else  
 {
      return 0;
 }
}

int CompareNum(int num1[], int num2[])
{   
  int i;
  int j=3;

     for(i=0, j=3; i<4, j>=0; i++, j--)
  {
      if(num1[i]!=num2[j])    //num1從開始的每一位與num2從最後一位往前比較,若不等返回0
   {
      return 0;
   }
  }
  return 1;
}
        

 \

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved