1三天打漁兩天曬網
題目內容:
中國有句俗語叫“三天打魚兩天曬網”,某人從1990年1月1日起開始“三天打魚兩天曬網”,即工作三天,然後再休息兩天。問這個人在以後的某一天中是在工作還是在休息。從鍵盤任意輸入一天,編程判斷他是在工作還是在休息,如果是在工作,則輸出:He is working,如果是在休息,則輸出:He is having a rest,如果輸入的年份小於1990或者輸入的月份和日期不合法,則輸出:Invalid input。
輸入格式: “%4d-%2d-%2d”
輸出格式:
“Invalid input” 或"He is having a rest" 或"He is working"
#include <stdio.h>
int main()
{
int i,j,k,number=0;
int year,month,day=0;
int days[12]={31,28,31,30,31,30,31,31,30,31,30,31};
scanf("%4d-%2d-%2d",&year,&month,&day);
if(year%400==0||(year%100!=0&&year%4==0))
days[1]=29;
if(month<1||month>12||day<1||day>days[month-1]||year<1990){
printf("Invalid input");
return 0;
}
for(i=1990;i<year;i++){
if(i%400==0||(i%100!=0&&i%4==0))
number += 366;
else
number += 365;
}
for(i=1;i<month;i++){
number += days[i-1];
}
for(i=1;i<=day;i++){
number += 1;
}
if(number%5<=3&&number%5>=1)
printf("He is working");
else
printf("He is having a rest");
return 0;
}
2統計用戶輸入
題目內容:
從鍵盤讀取用戶輸入直到遇到#字符,編寫程序統計讀取的空格數目、讀取的換行符數目以及讀取的所有其他字符數目。(要求用getchar()輸入字符)
輸入提示信息:“Please input a string end by #:\n”
輸入格式: getchar()
輸出格式: “space: %d,newline: %d,others: %d\n”
#include <stdio.h>
int main()
{
char c;
int space=0,newline=0,others=0;
printf("Please input a string end by #:\n");
c = getchar();
while(c!='#'){
c = getchar();
if(c == ' '){
space++;
}else if(c =='\n'){
newline++;
}else{
others++;
}
}
printf("space: %d,newline: %d,others: %d\n",space,newline,others);
return 0;
}
3統計正整數中指定數字的個數
題目內容:
從鍵盤輸入一個正整數number,求其中含有指定數字digit的個數。例如:從鍵盤輸入正整數number=1222,若digit=2,則1223中含有 3個2,要求用函數實現。函數原型爲:int CountDigit(int number,int digit);
#include <stdio.h>
int CountDigit(int number, int digit){
int l,num=0;
while(number!=0){
l = number%10;
if(l==digit)
num++;
number/=10;
}
return num;
}
int main()
{
int m,n;
printf("Input m,n:\n");
scanf("%d,%d",&m,&n);
printf("%d\n",CountDigit(m,n));
return 0;
}
4玫瑰花數
題目內容:
如果一個n位正整數等於它的n個數字的n次方和,則稱該數爲n位自方冪數。四位自方冪數稱爲玫瑰花數。編程計算並輸出所有的玫瑰花數。
#include <stdio.h>
#include <math.h>
int main()
{
int i;
for(i=1000;i<=9999;i++){
int num1=i%10;
int num2=i/10%10;
int num3=i/100%10;
int num4=i/1000;
if(i==pow(num1,4)+pow(num2,4)+pow(num3,4)+pow(num4,4))
printf("%d\n",i);
}
return 0;
}
5四位反序數
題目內容:
反序數就是將整數的數字倒過來形成的整數。例如,1234的反序數是4321。設N是一個四位數,它的9倍恰好是其反序數,編程計算並輸出N的值。
#include <stdio.h>
#include <math.h>
int main()
{
int i;
for(i=1000;i<=9999;i++){
int num1=i%10;
int num2=i/10%10;
int num3=i/100%10;
int num4=i/1000;
if(num1*1000+num2*100+num3*10+num4==i*9)
printf("%d\n",i);
}
return 0;
}
68除不盡的自然數
題目內容:
一個自然數被8除餘1,所得的商被8除也餘1,再將第二次的商被8除後餘7,最後得到一個商爲a。又知這個自然數被17除餘4,所得的商被17除餘15,最後得到一個商是a的2倍。求滿足以上條件的最小自然數。
#include <stdio.h>
#include <math.h>
int main()
{
int i;
for(i=9;;i++){
int a = i/8/8/8;
if(i%8==1&&i/8%8==1&&i/8/8%8==7){
if(i%17==4&&i/17%17==15&&i/17/17==a*2){
printf("%d\n",i);
return 0;
}
}
}
return 0;
}
7矩陣轉置v1.0
題目內容:
用二維數組作爲函數參數,編程計算並輸出n×n階矩陣的轉置矩陣。其中,n的值不超過10,n的值由用戶從鍵盤輸入。
輸入提示信息:
提示輸入矩陣的階數:“Input n:”
提示輸入矩陣數據:“Input %d*%d matrix:\n”
輸入格式: “%d”
輸出提示信息:“The transposed matrix is:\n”
輸出格式:"%4d"
#include <stdio.h>
#include <math.h>
#define MAX 10
void Swap(int matrix[][MAX], int n){
int temp,i,j;
for(i=0;i<n;i++){
for(j=0;j<i;j++){
temp=matrix[i][j];
matrix[i][j]=matrix[j][i];
matrix[j][i]=temp;
}
}
}
int main()
{
int i,j,n;
printf("Input n:");
scanf("%d",&n);
int matrix[MAX][MAX];
printf("Input %d*%d matrix:\n",n,n);
for(i=0;i<n;i++){
for(j=0;j<n;j++){
scanf("%d",&matrix[i][j]);
}
}
Swap(matrix,n);
printf("The transposed matrix is:\n");
for(i=0;i<n;i++){
for(j=0;j<n;j++){
printf("%4d",matrix[i][j]);
}
if(i!=n-1)
printf("\n");
}
return 0;
}
8兔子生崽問題
題目內容:
假設一對小兔的成熟期是一個月,即一個月可長成成兔,那麼如果每對成兔每個月都可以生一對小兔,一對新生的小兔從第二個月起就開始生兔子,試問從一對兔子開始繁殖,n(n<=12)月以後可有多少對兔子(即當年第n月份總計有多少對兔子,含成兔和小兔)?請編程求解該問題,n的值要求從鍵盤輸入。
參考答案:依題意,兔子的繁殖情況如圖所示。圖中實線表示成兔仍是成兔或者小兔長成成兔;虛線表示成兔生小兔。觀察分析此圖可發現如下規律:
(1)每月小兔對數 = 上個月成兔對數。
(2)每月成兔對數 = 上個月成兔對數 + 上個月小兔對數。
綜合(1)和(2)有:每月成兔對數 = 前兩個月成兔對數之和。
用fn(n=1,2,…)表示第n個月成兔對數,於是可將上述規律表示爲如下遞推公式:
#include <stdio.h>
#include <math.h>
#define MAX 10
int Rabbit_num(int n){
if(n==0)
return 0;
if(n==1||n==2)
return 1;
else
return Rabbit_num(n-1)+Rabbit_num(n-2);
}
int main()
{
int i,n,sum=0;
printf("Input n(n<=12):\n");
scanf("%d",&n);
for(i=0;i<n;i++){
printf("%4d",Rabbit_num(i+1)+Rabbit_num(i));
}
printf("\nTotal=%d\n",Rabbit_num(i)+Rabbit_num(i-1));
return 0;
}
9抓交通肇事犯
題目內容:
一輛卡車違犯交通規則,撞人後逃跑。現場有三人目擊事件,但都沒記住車號,只記下車號的一些特徵。甲說:牌照的前兩位數字是相同的;乙說:牌照的後兩位數字是相同的,但與前兩位不同;丙是位數學家,他說:四位的車號剛好是一個整數的平方。現在請根據以上線索幫助警方找出車號以便儘快破案。
[提示]:假設這個4位數的前兩位數字都是i,後兩位數字都是j,則這個可能的4位數
k = 1000i + 100i + 10j + j
式中,i和j都在0~9變化。此外,還應使k=mm,m是整數。由於k是一個4位數,所以m值不可能小於31。
輸入格式: 無
輸出格式:“k=%d,m=%d\n”
#include <stdio.h>
#include <math.h>
int main()
{
int i,j,k;
for(i=1;i<10;i++){
for(j=0;j<10;j++){
if(i!=j){
k=1000*i+100*i+10*j+j;
if((int)sqrt(k)*(int)sqrt(k)==k)//判斷k開根號可以得到整數
printf("k=%d,m=%d\n",k,(int)sqrt(k));
}
}
}
return 0;
}
10檢驗並打印幻方矩陣
題目內容:
幻方矩陣是指該矩陣中每一行、每一列、每一對角線上的元素之和都是相等的。從鍵盤輸入一個5×5的矩陣並將其存入一個二維整型數組中,檢驗其是否爲幻方矩陣,並將其按指定格式顯示到屏幕上。
輸入格式: “%d”
輸出格式:
如果是幻方矩陣,輸出提示信息: “It is a magic square!\n”
矩陣元素的輸出: “%4d”(換行使用"\n")
如果不是幻方矩陣,輸出提示信息: “It is not a magic square!\n”
輸入樣例1:
17_24_1_8_15
23_5_7_14_16
4_6_13_20_22
10_12_19_21_3
11_18_25_2_9
(輸人樣例中“”代表空格)
輸出樣例1:
It is a magic square!
17241815
23571416
46132022
10121921*3
111825***2**9
(輸出樣例中“”代表空格)
輸入樣例2:
1_0_1_6_1
3_1_1_1_1
1_1_1_1_2
1_1_1_1_1
9_1_7_1_1
(輸人樣例中“”代表空格)
輸出樣例2:
It is not a magic square!
#include <stdio.h>
#define MAX 5
#define SUM 12
int main()
{
int i,j,k=0;
int matrix[MAX][MAX];
int sum[SUM]={0};
for(i=0;i<MAX;i++){
for(j=0;j<MAX;j++){
scanf("%d",&matrix[i][j]);
sum[k]+=matrix[i][j];//計算行之和
}
k++;
}
for(i=0;i<MAX;i++){
for(j=0;j<MAX;j++){
sum[k]+=matrix[j][i];//列之和
}
k++;
sum[10]+=matrix[i][i];//主對角線
sum[11]+=matrix[i][MAX-i-1];//逆對角線
}
for(i=0;i<SUM;i++){
if(sum[i]!=sum[0]){
printf("It is not a magic square!\n");
return 0;
}
}
printf("It is a magic square!\n");
for(i=0;i<MAX;i++){
for(j=0;j<MAX;j++){
printf("%4d",matrix[i][j]);
}
printf("\n");
}
return 0;
}