日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

C语言期末题集

發布時間:2024/1/8 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C语言期末题集 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題庫要過期啦,把題目記錄下來吧那就,以后沒事了好看看

目錄

6-1 求最大的偶數和最小的奇數的差

6-2 字符串中的字符用插入法排序

6-3 日期幾何

6-4 在被調函數中計算任意日期的星期值

6-6 求自定類型元素序列的中位數

6-7 計算A[n]=1/(1 + A[n-1])

6-8 π/2≈1+1/3+1/3*2/5+...

6-9 求二維數組每行的和

6-10 主對角線的平方,左下三角的乘2

6-11 字符串中的字符逆序存放

6-12 字符串比較

6-13 交換最大值和最小值的位置

6-14 刪去一維數組中所有相同的數

6-15 在一個升序排列的數組中插入一個數

6-16 求出二維數組的最大元素及其所在的坐標

6-17 用函數實現從數列中刪除一個數

6-18 用函數實現插入數到數列指定位置

6-19 高效查單III

6-20 篩出字符串中的數字字符

?編程題

7-1 字符串排序

7-2 驗證手機號

7-3 循環的極值

7-4 N個數求和

7-5 A-B

7-6 Phone List

7-7 英文單詞排序

7-8 最長對稱子串

7-9 統計一行文本的單詞個數

7-10 穩贏

7-11 打印沙漏

7-12 組合數的和

7-13 考試周

7-14 Cassels方程

7-15 字母串

7-16 調和平均

7-17 西安距離

7-18 乘法口訣數列

7-19 誰能進圖書館

7-20 試試手氣


6-1 求最大的偶數和最小的奇數的差

分數 10

作者 王躍萍

單位 東北石油大學

求10個數中的最大的偶數和最小的奇數的差。

函數接口定義:

int fun(int a[],int n);

函數fun中a、n是用戶傳入的參數,函數fun的功能是求a數組中的n個數中的最大的偶數和最小的奇數的差,并返回此差值。

裁判測試程序樣例:

#include<stdio.h> int fun(int a[],int n); int main() {int b[10],i,max,k=0; for(i=0;i<10;i++) scanf("%d",&b[i]); printf("%d\n",fun(b,10)); return 0; } /* 請在這里填寫答案 */

輸入樣例:

1 2 3 4 5 6 7 8 9 10

輸出樣例:

9

思路:直接找出最大偶數和最小奇數的值然后計算出差

答案:

int fun(int a[],int n){int max=0,min=999999;for(int j=0;j<n;j++){if(a[j]%2==0){if(a[j]>max)max=a[j];}else{if(a[j]<min)min=a[j];} // printf("max:%d min:%d\n",max,min);}return max-min;}

6-2 字符串中的字符用插入法排序

分數 10

作者 王躍萍

單位 東北石油大學

fun函數的功能是:利用插入法對字符串中的字符按從小到大的順序進行排序。

函數接口定義:

void fun(char aa[]);

其中 aa 是用戶傳入的參數。 函數利用插入法對字符串中的字符按從小到大的順序進行排序。

裁判測試程序樣例:

#include <stdio.h> #define N 80 void fun(char aa[]); int main() { char a[N]; int i; gets(a); fun(a); printf("The string after sorting: %s\n",a); return 0; } /* 請在這里填寫答案 */

輸入樣例:

asdcfv

輸出樣例:

The string after sorting: acdfsv

?思路:用數組和冒泡排序對字符串進行排列

答案:?

void fun(char aa[]) {int m=strlen(aa);for(int k=0;k<m-1;k++){for(int j=k+1;j<m;j++){if(aa[k]>aa[j]){char t;t=aa[k];aa[k]=aa[j];aa[j]=t;}}} }

?

6-3 日期幾何

分數 10

作者 Happyer

單位 湖北文理學院

關于日期的結構定義如下:
struct DateG{ int yy,mm,dd;};

編寫兩個函數,一個計算自公元1年1月1日到指定的日期共經歷了多少天。另一個是前一個函數的逆函數:由自公元1年1月1日歷經指定的天數后的日期(返回年月日構成的日期)。

函數接口定義:

struct DateG days2Date(int x);{//from:{1,1,1} + 100-->{1,4,11} int Days(DateG x);// {2,,4,11} return 465 from{1,1,1}

裁判測試程序樣例:

struct DateG{ int yy,mm,dd; }; char leapYear(int year);//閏年否 struct DateG _DateG(char *st);{//"1919-9-9"-->{1919,9,9} struct DateG Add(struct DateG x,int y);//{1919,9,9}+50-->{1919,10,29} char* Date2string(struct DateG x);//{1919,9,9}-->"1919-09-09" //以上為測試程序提供的測試用函數,略去不表, //以下兩函數是必須自己完成的函數 struct DateG days2Date(int x);{//from:{1,1,1} + 100-->{1,4,11} int Days(struct DateG x);// {2,,4,11} return 465 from{1,1,1} int main(){ char st[12];scanf("%s",st); struct DateG d1=_DateG(st), d2=Add(d1,60*365); printf("%s\n",Date2string(d2)); d2=Add(d2,-1000); printf("%s\n",Date2string(d2)); d2=_DateG("2020-1-23"); printf("%.2f\n",(Days(d2)-Days(d1))/365.0); return 0; } /* 請在這里填寫答案 */

輸入樣例:

輸入用-號分隔的出生年月日,系統確保測試數據的合法性

2001-1-1

輸出樣例:

共三行輸出。分別是:60年(按365天計一年精確計算的)后的退休日期;退休前倒計時1000天的日期;武漢抗疫封城時(2020-1-23)的年齡(按每365天為一歲,保留2位小數)。

[2060-12-17] [2058-03-23] 19.07

這題題目屬實不太懂,有會的小伙伴歡迎補充答案

//

?

6-4 在被調函數中計算任意日期的星期值

分數 10

作者 巨同升

單位 山東理工大學

以下程序的功能是:首先在main函數中輸入任意一個日期的年、月、日的值,然后在被調函數weekday中求出該日期是星期幾。要求寫出函數weekday。
假定從公元第一天開始,就實施格里高利歷法。格里高利歷法的置閏規則是400年97閏,也可以概括為:四閏百不閏,四百閏。

函數接口定義:

void weekday(int y,int m,int d);

其中y、m、d是由主調函數傳入的參數。

裁判測試程序樣例:

#include <stdio.h> void weekday(int y,int m,int d); int main(void) {int y,m,d; scanf("%d%d%d",&y,&m,&d); weekday(y,m,d); return 0; } /* 請在這里填寫答案 */

輸入樣例:

2012 3 25

輸出樣例:

星期日

思路:我也不知道是哪個大佬弄出來的這個公式,將就看吧

答案:

void weekday(int y,int m,int d) {if(m==1||m==2) {m+=12;y--; }int w=(d+2*m+3*(m+1)/5+y+y/4-y/100+y/400)%7;switch(w){case 0: printf("星期一\n"); break;case 1: printf("星期二\n"); break;case 2: printf("星期三\n"); break;case 3: printf("星期四\n"); break;case 4: printf("星期五\n"); break;case 5: printf("星期六\n"); break;case 6: printf("星期日\n"); break;}}

?

分數 15

作者 唐艷琴

單位 中國人民解放軍陸軍工程大學

本題目要求讀入每月工資,計算按月需要累計繳納的稅額(稅率見下圖),此處只需顯示應繳納的稅額,無需減去已繳納部分。結果保留兩位小數。 注意:每月有5000元免稅額。


上圖為按年累計應納稅所得額

函數接口定義:

double m_tax(double salary,int month);

其中salary和 month 是用戶傳入的參數,函數返回每月累計應納稅額。

裁判測試程序樣例:

#include<stdio.h> double m_tax(double salary,int month); int main() { double money,tax; int i; for(i=1;i<=12;i++) { scanf("%lf",&money); tax=m_tax(money,i); printf("the sum of %d months tax is %.2f\n",i,tax); } return 0; } /* 請在這里填寫答案 */

輸入樣例:

1000 2000 10000 5000 8000 500 2000 15000 1000 5000 6000 9000

輸出樣例:

在這里給出相應的輸出。例如:

the sum of 1 months tax is 0.00 the sum of 2 months tax is 0.00 the sum of 3 months tax is 0.00 the sum of 4 months tax is 0.00 the sum of 5 months tax is 30.00 the sum of 6 months tax is 0.00 the sum of 7 months tax is 0.00 the sum of 8 months tax is 105.00 the sum of 9 months tax is 0.00 the sum of 10 months tax is 0.00 the sum of 11 months tax is 15.00 the sum of 12 months tax is 135.00

注意 :3月雖然工資為10000元,但3個月累計免稅額為15000元,因此無需納稅。5月時累計免稅額為25000元,累計工資收入為26000元,因此應納稅額為1000元,按稅率為30元,后面同理所得。

?思路:這題看著著真頭疼啊,抱歉我不會

//

?

6-6 求自定類型元素序列的中位數

分數 25

作者 陳越

單位 浙江大學

本題要求實現一個函數,求N個集合元素A[]的中位數,即序列中第?(N+1)/2?大的元素。其中集合元素的類型為自定義的ElementType。

函數接口定義:

ElementType Median( ElementType A[], int N );

其中給定集合元素存放在數組A[]中,正整數N是數組元素個數。該函數須返回N個A[]元素的中位數,其值也必須是ElementType類型。

裁判測試程序樣例:

#include <stdio.h> #define MAXN 10 typedef float ElementType; ElementType Median( ElementType A[], int N ); int main () { ElementType A[MAXN]; int N, i; scanf("%d", &N); for ( i=0; i<N; i++ ) scanf("%f", &A[i]); printf("%.2f\n", Median(A, N)); return 0; } /* 你的代碼將被嵌在這里 */

輸入樣例:

3 12.3 34 -5

輸出樣例:

12.30

?答案:

ElementType Median( ElementType A[], int N ){//希爾排序int d, i , j, k;ElementType temp;for(d = N/2; d >= 1; d/=2){for(i=d;i < N; i++){for(j=i-d;j>=0&&A[j]>A[j+d];j-=d){temp = A[j];A[j] = A[j+d];A[j+d] = temp; }}}return A[N/2]; }

?

6-7 計算A[n]=1/(1 + A[n-1])

分數 10

作者 王躍萍

單位 東北石油大學

函數 fun 的功能是:根據整型形參 n,計算某一數據項的值。
A[1]=1, A[2]=1/(1 + A[1]), A[3]=1/(1 + A[2]), …,A[n]=1/(1 + A[n-1])
例如,若 n=10,則應輸出:A10=0.617977。

函數接口定義:

float fun(int n);

其中n是用戶傳入的參數,函數須返回第n項的值。

裁判測試程序樣例:

#include <stdio.h> float fun(int n); int main( ) { int n ; scanf("%d", &n ) ; printf("A%d=%f\n", n, fun(n) ) ; return 0; } /* 請在這里填寫答案 */

輸入樣例:

10

輸出樣例:

A10=0.6180

答案:

float fun(int n) {if(n==1)return 1;elsereturn 1/(1+fun(n-1));}

6-8 π/2≈1+1/3+1/3*2/5+...

分數 10

作者 王躍萍

單位 東北石油大學

函數fun的功能是:根據以下公式求π值,并作為函數值返回。例如,給指定精度的變量eps輸入0.0005時,應當輸出Pi=3.140578。

函數接口定義:

double fun(double eps);

其中eps是用戶傳入的精度,函數須返回π值。

裁判測試程序樣例:

#include<stdio.h> double fun(double eps); int main() { double x; scanf("%lf",&x); printf("Pi=%lf\n",fun(x)); return 0; } /* 請在這里填寫答案 */

輸入樣例:

0.0005

輸出樣例:

Pi=3.140578

?答案:

double fun(double e) {double s,n,t,p;n=1.0;s=1.0;t=1;p=0;while(s>=e){p+=s;t=n/(2*n+1);s*=t;n++;}p=p*2;return p; }

?

6-9 求二維數組每行的和

分數 10

作者 王躍萍

單位 東北石油大學

求一個二維數組每行的和。輸出二維數組時,將每行的和輸出在該行的右邊。

函數接口定義:

void fun(int a[3][3],int b[3]);

函數fun中 a,b都是用戶傳入的參數,函數fun的功能是將a數組中每行元素的和放在b數組中。

裁判測試程序樣例:

#include "stdio.h" void fun(int a[3][3],int b[3]); int main() {int a[3][3]={1,2,3,9,8,4,6,2,1},i,j,b[3]; fun(a,b); for(i=0;i<3;i++) {for(j=0;j<3;j++) printf("%4d",a[i][j]); printf("%4d\n",b[i]); } return 0; } /* 請在這里填寫答案 */

輸出樣例:

1 2 3 69 8 4 216 2 1 9

答案:

void fun(int a[3][3],int b[3]) {for(int i=0;i<3;i++){int sum=0;for(int j=0;j<3;j++){sum+=a[i][j];b[i]=sum;}} }

6-10 主對角線的平方,左下三角的乘2

分數 10

作者 王躍萍

單位 東北石油大學

將一個二維數組作如下處理后輸出。將主對角線上的元素變為其平方,左下三角的元素變成自身乘2,然后輸出左下三角的元素(包括主對角線元素)。

函數接口定義:

void fun(int a[3][3]);

函數fun中 a是用戶傳入的參數,函數fun的功能將主對角線上的元素變為其平方,左下三角的元素變成自身乘2。

裁判測試程序樣例:

#include<stdio.h> void fun(int a[3][3]); int main() {int i,j,a[3][3]={1,2,3,4,5,6,7,8,9}; for(i=0;i<3;i++) {for(j=0;j<3;j++) printf("%5d",a[i][j]); printf("\n"); } fun(a); for(i=0;i<3;i++) { for(j=0;j<=i;j++) printf("%5d",a[i][j]); printf("\n"); } return 0; } /* 請在這里填寫答案 */

輸出樣例:

1 2 34 5 67 8 918 2514 16 81

?答案:

void fun(int a[3][3]) {for(int i=0;i<3;i++){for(int j=0;j<3;j++){if(i==0&&j==0 || i==1&&j==1 || i==2&&j==2 )a[i][j]=a[i][j]*a[i][j];elsea[i][j]=a[i][j]*2;}} }

?

6-11 字符串中的字符逆序存放

分數 10

作者 王躍萍

單位 東北石油大學

將一個字符串中的字符逆序存放。如字符串為“abcde",則逆序存放后應為"edcba"。

函數接口定義:

void fun(char s[])

s 是用戶傳入的參數。 函數將字符串s中的字符逆序存放。

裁判測試程序樣例:

#include<stdio.h> void fun(char s[]); int main() {char s[80]; gets(s); fun(s); puts(s); return 0; } /* 請在這里填寫答案 */

輸入樣例:

abcde

輸出樣例:

edcba

答案:?

void fun(char s[]) {int a=strlen(s),m=0;char arr[80];for(int i=a-1;i>=0;i--){arr[m]=s[i];m++;} // printf("%s",arr); // printf("\n");for(int i=0;i<a;i++)s[i]=arr[i];}

?

6-12 字符串比較

分數 10

作者 王躍萍

單位 東北石油大學

函數fun的功能是比較兩個字符串,如果s1=s2,則返回值0;如果s1>s2,則返回值1;如果s1<s2,則返回-1。

函數接口定義:

int fun(char a[],char b[]);

其中a、b是用戶傳入的參數。 函數比較兩個字符串,如果a=b,則返回值0;如果a>b,則返回值1;如果a<b,則返回-1。

裁判測試程序樣例:

#include "stdio.h" #include "string.h" int fun(char a[],char b[]); int main() {int t; char s1[40],s2[40]; gets(s1); gets(s2); t=fun(s1,s2); printf("%d\n",t); return 0; } /* 請在這里填寫答案 */

輸入樣例:

asd fg

輸出樣例:

-1

答案:

int fun(char a[],char b[]) {if(strcmp(a,b)==0)return 0;else if(strcmp(a,b)>0)return 1;elsereturn -1;}

?

6-13 交換最大值和最小值的位置

分數 10

作者 王躍萍

單位 東北石油大學

請編寫函數fun,交換一個數組中最大值和最小值的位置,其他元素的位置不變。要求在主函數中輸入一組數,然后在調用fun函數后,輸出處理后的數據。。

函數接口定義:

void fun(int a[]);

其中 a 是用戶傳入的參數。函數功能是交換數組 a中最大值和最小值的位置,其他元素的位置不變。

裁判測試程序樣例:

#include <stdio.h> void fun(int a[]); int main() { int a[10],i; for(i=0;i<10;i++) scanf("%d",&a[i]); fun(a); for(i=0;i<10;i++) printf("%4d",a[i]); printf("\n"); return 0; } /* 請在這里填寫答案 */

輸入樣例:

9 5 1 2 6 3 4 8 7 5

輸出樣例:

1 5 9 2 6 3 4 8 7 5

答案:

void fun(int a[]) {int min=999999,max=0,m,n;for(int i=0;i<10;i++){if(a[i]<min){min=a[i];m=i;}if(a[i]>max){max=a[i];n=i;}} // printf("max=%d min=%d\n",max,min);int t=0;t=a[m];a[m]=a[n];a[n]=t;}

?

6-14 刪去一維數組中所有相同的數

分數 10

作者 王躍萍

單位 東北石油大學

請編寫函數fun,函數的功能是:刪去一維數組中所有相同的數,使之只剩一個。數組中的數已按由小到大的順序排列,函數返回刪除后數組中數據的個數。

函數接口定義:

int fun(int a[M],int n);

其中 a 和 n 都是用戶傳入的參數。函數的功能是:刪去一維數組中所有相同的數,使之只剩一個。數組中的數已按由小到大的順序排列,函數返回刪除后數組中數據的個數。

裁判測試程序樣例:

#include <stdio.h> #define M 10 int fun(int a[M],int n); int main() { int a[M]={1,3,5,5,7,7,7,11,11,13},num; num=fun(a,M); printf("num=%d",num); return 0; } /* 請在這里填寫答案 */

輸出樣例:

num=6

答案:

int fun(int a[M],int n) { int num=0; int t=a[0]; for(int i=1;i<n;i++) {if(a[i]==t){num++;}elset=a[i];}return n-num; }

?

6-15 在一個升序排列的數組中插入一個數

分數 10

作者 王躍萍

單位 東北石油大學

編寫函數fun,在一個已按升序排列的數組中插入一個數,插入后,數組元素仍按升序排列。

函數接口定義:

void fun(int a[N],int number);

其中 a 和 number 都是用戶傳入的參數。函數在一個已按升序排列的數組 a 中插入一個數 number ,插入后,數組元素仍按升序排列

裁判測試程序樣例:

#include <stdio.h> #define N 11 void fun(int a[N],int number); int main() { int i,number,a[N]={1,2,4,6,8,9,12,15,149,156}; scanf("%d",&number); printf("The original array:\n"); for(i=0;i<N-1;i++) printf("%5d",a[i]); printf("\n"); fun(a,number); printf("The result array:\n"); for(i=0;i<N;i++) printf("%5d",a[i]); printf("\n"); return 0; } /* 請在這里填寫答案 */

輸入樣例:

6

輸出樣例:

The original array:1 2 4 6 8 9 12 15 149 156 The result array:1 2 4 6 6 8 9 12 15 149 156

答案:

void fun(int a[N],int number) {int b[N];int cnt=0,m=0;for(int i=0;i<N+1;i++){if(a[i]<number){b[i]=a[m];m++;}else if(a[i]>number&&cnt==0){cnt=1;b[i]=number;}else {b[i]=a[m];m++;}}for(int i=0;i<N+1;i++){a[i]=b[i];} }

?

6-16 求出二維數組的最大元素及其所在的坐標

分數 10

作者 王躍萍

單位 東北石油大學

編寫一個函數fun,函數的功能是:求出N×M整型數組的最大元素及其所在的行坐標及列坐標(如果最大元素不唯一,選擇位置在最前面的一個)。

函數接口定義:

int fun(int array[N][M]);

其中 a 是用戶傳入的參數。 函數須返回 N×M整型數組的最大元素,其所在的行坐標及列坐標放在全局變量Row和Col中。

裁判測試程序樣例:

#include <stdio.h> #define N 4 #define M 3 int Row,Col; int fun(int array[N][M]); int main() { int a[N][M],i,j,max,row,col; for(i=0;i<N;i++) for(j=0;j<M;j++) scanf("%d",&a[i][j]); for(i=0;i<N;i++) { for(j=0;j<M;j++) printf("%5d",a[i][j]); printf("\n"); } max=fun(a); printf("max=%d,row=%d,col=%d",max,Row,Col); return 0; } /* 請在這里填寫答案 */

輸入樣例:

5 8 4 4 5 11 1 2 3 7 4 1

輸出樣例:

5 8 44 5 111 2 37 4 1 max=11,row=1,col=2

答案:

int fun(int array[N][M]) {int max= array[0][0];for(int i=0;i<4;i++){for(int j=0;j<3;j++){if(max<array[i][j]){max= array[i][j];Row=i;Col=j;}}}return max; }

?

6-17 用函數實現從數列中刪除一個數

分數 18

作者 yjs

單位 福州大學至誠學院

編寫一個函數實現:刪除n個元素的數列中下標為k的元素。

測試程序將輸入一個下標值,調用本函數,刪除數列{1,4,13,9,6,11,18,14,25}中該下標位置的元素,并輸出刪除后的數列。

函數接口定義:

void deleted ( int a[], int n, int k);

其中 a 、n和 k 都是用戶傳入的參數。 a是數列所在數組的首地址; n 是數列元素個數, k 是[0, 8]區間內的個位數。

裁判測試程序樣例:

#include <stdio.h> void deleted ( int a[], int n, int k); int main() { int a[9]={1,4,13,9,6,11,18,14,25},k; int i; scanf("%d",&k); deleted(a,9,k); for(i=0;i<8;i++) printf("%4d", a[i]); return 0; } /*請將答案寫在這里*/

輸入樣例:

輸入一個[0,8]間的個位數

0

輸出樣例:

輸出數組中各元素占4列

4 13 9 6 11 18 14 25

答案:

void deleted ( int a[], int n, int k) {int b=0;for(int i=0;i<n;i++){if(i==k){a[b]=a[i+1];i++;b++;}else{a[b]=a[i];b++;}} }

?

6-18 用函數實現插入數到數列指定位置

分數 18

作者 yjs

單位 福州大學至誠學院

編寫一個函數實現:將一個數插入數列中指定下標的位置,并保持原有數列順序不變。
測試程序將輸入一個數x和下標k,并調用本函數將該數插入9個數的數列中下標為k的位置,并保持原有數列順序不變,然后輸出新的數列(10個數)。

函數接口定義:

在這里描述函數接口。例如: void insert ( int a[], int n, int x, int k);

其中 a 、n 、x 和 k 都是用戶傳入的參數。 a 是待查數列的數組首地址; n 是數組元素個數; x是帶插入數的值; k是帶插入數的下標,將實現將x插入 n個數的數組 a 中下標為 k 的位置。

裁判測試程序樣例:

#include <stdio.h> void insert ( int a[], int n, int x, int k); int main() { int a[10]={1,4,13,9,6,11,18,14,25},x,k; int i; scanf("%d%d",&x,&k); insert(a,9,x,k); for(i=0;i<10;i++) printf("%4d", a[i]); return 0; } /*請將答案寫在這里*/

輸入樣例:

輸入兩個數,第1個數代表待插入的數值,第2個數應在[0,9]間代表待插入的位置下標

15 9

輸出樣例:

輸出插入15后的數列

1 4 13 9 6 11 18 14 25 15

?答案:

void insert ( int a[], int n, int x, int k) {if(k==n-1)a[k]=x;else {for(int i=n-1;i>=k;i--){a[i+1]=a[i];} a[k]=x;} }

6-19 高效查單III

分數 10

作者 龔雄興

單位 湖北文理學院

單位上班打卡,一般上班、下班及中間各打一次,每天每個人均應該打卡三次……。編寫函數,高效地(使用盡量少的輔助空間,以盡量少的時間代價)找出指定長度的數組中只一次卡的元素(就是假設的少打卡的那一個)。數組元素為整數,可通過getDi()函數取得。

函數接口定義:

vooid fun(int n);

其中 n 是數組中元素的個數。函數須找出數組中單個出現的整數輸出。

裁判測試程序樣例:

#include <stdio.h> #include <stdlib.h> int getDi(int i);//return D[i] 用來訪問數組元素的函數--測試程序提供 void Init(int n);//數據初始化函數--測試程序提供 void Fun(int n);//需要完成的函數 int main(){ int i,j=0,n;scanf("%d",&n);srand(n); Init(n); fun(n); return 0; }

輸入樣例:

10 97 61 97 61 41 97 77 41 41 61

輸出樣例:

程序輸出那個單次出現的整數,并換行。

77

這題題目我看不懂!!!嗚嗚嗚

//

6-20 篩出字符串中的數字字符

分數 10

作者 王躍萍

單位 東北石油大學

編寫函數:把一個字符串中的所有英文字母取出,生成一個新的字符串。

函數接口定義:

void fun(char s[]);

其中s是用戶傳入的參數。 函數fun的功能是把一個字符串s中的所有數字字符取出,并重新放回s中。

裁判測試程序樣例:

#include <stdio.h> void fun(char s[]); int main() { char item[80]; gets(item); fun(item); printf("%s\n",item); return 0; } /* 請在這里填寫答案 */

輸入樣例:

as12fg

輸出樣例:

12

我覺得結尾的\0字符串結尾這個知識點需要記一下!我老是會忘記?

答案:?

void fun(char s[]){char a[10];int x=0,b=strlen(s);for(int i=0;i<b;i++){if(s[i]>=48&&s[i]<=57){a[x]=s[i];x++;}}for(int i=0;i<=b;i++)s[i]=0;for(int i=0;i<x;i++)s[i]=a[i];s[x]='\0';//字符串以\0判斷是否為末尾 否則會繼續輸出 }

?編程題

分割線了

---------------------------------------------------------------------------------------------------------------------------------

7-1 字符串排序

分數 20

作者 張泳

單位 浙大城市學院

本題要求編寫程序,讀入5個字符串,按由小到大的順序輸出。

輸入格式:

輸入為由空格分隔的5個非空字符串,每個字符串不包括空格、制表符、換行符等空白字符,長度小于80。

輸出格式:

按照以下格式輸出排序后的結果:

After sorted: 每行一個字符串

輸入樣例:

red yellow blue black white

輸出樣例:

After sorted: black blue red white yellow

這道題要牢記strcmp和strcpy函數的運用!!?

答案:

#include <stdio.h> #include <string.h>#define N 81void swap( char str1[], char str2[] ){char temp[N];strcpy(temp, str1); // strcpy:字符串比較函數strcpy(str1, str2);strcpy(str2, temp); } int main(){char str[5][N];int i, j;for( i=0; i<5; i++ )scanf(" %s", &str[i]);for( i=0; i<4; i++ ){ // 選擇排序int min = i;for( j=i+1; j<5; j++ )if( strcmp(str[min], str[j]) > 0 ) // strcmp:字符串比較函數min = j;if( min != i )swap(str[min], str[i]);}printf("After sorted:\n");for( i=0; i<5; i++ )printf("%s\n", str[i]);return 0; }

?

7-2 驗證手機號

分數 5

作者 賀細平

單位 湖南農業大學

某系統在新用戶注冊時必須輸入手機號,為了提高系統效率,防止輸錯手機號,需要對手機號進行驗證。
驗證規則為:
(1)長度為11位
(2)由數字0~9組成
(3)必須是1開頭
以上3個條件同時滿足,則驗證通過,否則為不通過。

輸入格式:

在一行中一個字符串,長度不超過20個字符。

輸出格式:

如果驗證通過則輸出yes,否則輸出no。

輸入樣例:

13812345678

輸出樣例:

yes

?答案:

#include <stdio.h> int main() {char arr[100];scanf("%s",&arr);int m=strlen(arr),cnt=0;for(int i=0;i<m;i++) // printf("%c",arr[i]);{if(arr[i]>'0'&&arr[i]<'9')cnt=1;elsecnt=0;}if(m==11&&arr[0]=='1'&&cnt==1)printf("yes");elseprintf("no"); }

7-3 循環的極值

分數 20

作者 劉勇

單位 重慶巴蜀常春藤學校

對于一個給定的數列, 輸出在這個數列里面排第二大的那個數。

輸入格式:

第1行:一個整數n(2<=n<=100000),表示數列的長度
第2行:有n個不相等的整數。

輸出格式:

一個整數, 表示在這個數列里面排第二大的那個數。

輸入樣例:

5 2 6 4 3 8

輸出樣例:

6

答案:

#include <stdio.h> int main() {int t,arr[1000];scanf("%d",&t);for(int i=0;i<t;i++){scanf("%d",&arr[i]);}for(int i=0;i<t-1;i++){for(int j=i+1;j<t;j++){if(arr[i]>arr[j]){int t;t=arr[i];arr[i]=arr[j];arr[j]=t;}}}printf("%d",arr[t-1-1]);return 0; }

?

7-4 N個數求和

分數 20

作者 陳越

單位 浙江大學

本題的要求很簡單,就是求N個數字的和。麻煩的是,這些數字是以有理數分子/分母的形式給出的,你輸出的和也必須是有理數的形式。

輸入格式:

輸入第一行給出一個正整數N(≤100)。隨后一行按格式a1/b1 a2/b2 ...給出N個有理數。題目保證所有分子和分母都在長整型范圍內。另外,負數的符號一定出現在分子前面。

輸出格式:

輸出上述數字和的最簡形式 —— 即將結果寫成整數部分 分數部分,其中分數部分寫成分子/分母,要求分子小于分母,且它們沒有公因子。如果結果的整數部分為0,則只輸出分數部分。

輸入樣例1:

5 2/5 4/15 1/30 -2/60 8/3

輸出樣例1:

3 1/3

輸入樣例2:

2 4/3 2/3

輸出樣例2:

2

輸入樣例3:

3 1/3 -1/6 1/8

輸出樣例3:

7/24

這道題看著就麻煩,總而言之就是把它們通分化簡?,感謝大佬提供的代碼

答案:

#include <stdio.h> int gcd(int m,int n);int main(int argc, char** argv) {int N;scanf("%d", &N);int i,a[N],b[N];int x,y,c,d,m,n;//x為分子,y為分母//讀取分數for (i = 0; i < N; i++) {scanf("%d/%d", &a[i], &b[i]);}//通分x = a[0];y = b[0];for (i = 1; i < N; i++) {x = x * b[i] + a[i] * y;//通分后分子大小y *= b[i]; //通分后分母大小c = gcd(x, y); //最大公約數if(c!=0){x /= c;//化簡后分子y /= c;//化簡后分母}}if(x == 0 && y != 0){printf("0");}else{d = x/y;//求整數部分x %= y;//求分數部分if (d != 0 && x != 0) {printf("%d %d/%d", d, x, y);}else if (d != 0 && x == 0) {printf("%d", d);}else {printf("%d/%d",x, y);}}return 0; }//輾轉相除法最大公約數int gcd(int m,int n){while (n) {int t = n;m %= n;n = m;m = t;}return m;}

?

7-5 A-B

分數 20

作者 陳越

單位 浙江大學

本題要求你計算A?B。不過麻煩的是,A和B都是字符串 —— 即從字符串A中把字符串B所包含的字符全刪掉,剩下的字符組成的就是字符串A?B。

輸入格式:

輸入在2行中先后給出字符串A和B。兩字符串的長度都不超過104,并且保證每個字符串都是由可見的ASCII碼和空白字符組成,最后以換行符結束。

輸出格式:

在一行中打印出A?B的結果字符串。

輸入樣例:

I love GPLT! It's a fun game! aeiou

輸出樣例:

I lv GPLT! It's fn gm!

答案:

#include<stdio.h> #include<string.h> int main() {int i=0,j=0,cnt=0; char arr[10010]; char brr[10010]; int len; gets(arr);gets(brr);len = strlen(brr); while(arr[i]!='\0') {for(j=0;j<len;j++){if(arr[i]==brr[j]){cnt=1;}}if(cnt==0){printf("%c",arr[i]);}cnt=0;i++;}printf("\n");return 0; }

?

7-6 Phone List

分數 10

作者 蘭大飛馬

單位 蘭州大學

給定 n 個長度不超過 10 的數字串,問其中是否存在兩個數字串 S,T,使得 S 是 T 的前綴,多組數據。

輸入格式:

第一行一個整數 T,表示數據組數。
對于每組數據,第一行一個數 n,接下來 n 行輸入 n 個數字串。
對于全部數據,1≤T≤40,1≤n≤104。

輸出格式:

對于每組數據,若存在兩個數字串 S,T,使得 S 是

//

T 的前綴,則輸出 NO ,否則輸出 YES 。
請注意此處結果與輸出的對應關系!

輸入樣例:

2 3 911 97625999 91125426 5 113 12340 123440 12345 98346

輸出樣例:

NO YES

?抱歉這題我不會做

//

?

7-7 英文單詞排序

分數 25

作者 張泳

單位 浙大城市學院

本題要求編寫程序,輸入若干英文單詞,對這些單詞按長度從小到大排序后輸出。如果長度相同,按照輸入的順序不變。

輸入格式:

輸入為若干英文單詞,每行一個,以#作為輸入結束標志。其中英文單詞總數不超過20個,英文單詞為長度小于10的僅由小寫英文字母組成的字符串。

輸出格式:

輸出為排序后的結果,每個單詞后面都額外輸出一個空格。

輸入樣例:

blue red yellow green purple #

輸出樣例:

red blue green yellow purple

?利用二維數組來排序

答案:

#include<stdio.h> int main() {int n;char arr[50][50];int b[50],cnt;for(int i=1;;i++){gets(arr[i]);if(arr[i][0]=='#'){cnt=i;break;}b[i]=strlen(arr[i]);}//排序for(int i=0;i<=50;i++){for(int j=1;j<cnt;j++){if(b[j]==i)printf("%s ",arr[j]);}}printf("\n");return 0; }

?

7-8 最長對稱子串

分數 25

作者 陳越

單位 浙江大學

對給定的字符串,本題要求你輸出最長對稱子串的長度。例如,給定Is PAT&TAP symmetric?,最長對稱子串為s PAT&TAP s,于是你應該輸出11。

輸入格式:

輸入在一行中給出長度不超過1000的非空字符串。

輸出格式:

在一行中輸出最長對稱子串的長度。

輸入樣例:

Is PAT&TAP symmetric?

輸出樣例:

11

這題有錯誤!答案不完整,只拿下了一半的分,以后有機會再改吧(可能以后就忘了)?

答案:?

#include <stdio.h> #include <string.h> //循環每一個字符,找到中間的,然后前后比較,記錄長度 int main() {char str[1001];int i;int len = 1, max = 1;int a, b;gets(str);int m = strlen(str);for (i = 1;i < m;i++){len = 1;a = i-1;b = i + 1;while (a >= 0 && b < m) {if (str[a] == str[b]) {len += 2;a--;b++;}elsebreak;}if (len > max)max = len;}printf("%d", max);return 0; }

7-9 統計一行文本的單詞個數

分數 15

作者 張彤彧

單位 浙江大學

本題目要求編寫程序統計一行字符中單詞的個數。所謂“單詞”是指連續不含空格的字符串,各單詞之間用空格分隔,空格數可以是多個。

輸入格式:

輸入給出一行字符。

輸出格式:

在一行中輸出單詞個數。

輸入樣例:

Let's go to room 209.

輸出樣例:

5

答案:

#include <stdio.h> #include <string.h> int main() {char arr[10000];int cnt=0,h=1;gets(arr);int a=strlen(arr);for(int i=0;i<a;i++){if(arr[i]==' '){h=1;}if(arr[i]!=' '&&h==1){cnt++;h=0;}}printf("%d",cnt);return 0; }

7-10 穩贏

分數 15

作者 陳越

單位 浙江大學

大家應該都會玩“錘子剪刀布”的游戲:兩人同時給出手勢,勝負規則如圖所示:

現要求你編寫一個穩贏不輸的程序,根據對方的出招,給出對應的贏招。但是!為了不讓對方輸得太慘,你需要每隔K次就讓一個平局。

輸入格式:

輸入首先在第一行給出正整數K(≤10),即平局間隔的次數。隨后每行給出對方的一次出招:ChuiZi代表“錘子”、JianDao代表“剪刀”、Bu代表“布”。End代表輸入結束,這一行不要作為出招處理。

輸出格式:

對每一個輸入的出招,按要求輸出穩贏或平局的招式。每招占一行。

輸入樣例:

2 ChuiZi JianDao Bu JianDao Bu ChuiZi ChuiZi End

輸出樣例:

Bu ChuiZi Bu ChuiZi JianDao ChuiZi Bu

?答案:

#include<stdio.h> int main() {int n;scanf("%d",&n);char a[100];scanf("%s",a);int cnt=0;while(a[0]!='E'){if(cnt==n){if(a[0]=='C')printf("ChuiZi\n");else if(a[0]=='B')printf("Bu\n");elseprintf("JianDao\n");cnt=-1;}else{if(a[0]=='C')printf("Bu\n");else if(a[0]=='B')printf("JianDao\n");elseprintf("ChuiZi\n");}cnt++;scanf("%s",a);} }

?

7-11 打印沙漏

分數 20

作者 陳越

單位 浙江大學

本題要求你寫個程序把給定的符號打印成沙漏的形狀。例如給定17個“*”,要求按下列格式打印

************ *****

所謂“沙漏形狀”,是指每行輸出奇數個符號;各行符號中心對齊;相鄰兩行符號數差2;符號數先從大到小順序遞減到1,再從小到大順序遞增;首尾符號數相等。

給定任意N個符號,不一定能正好組成一個沙漏。要求打印出的沙漏能用掉盡可能多的符號。

輸入格式:

輸入在一行給出1個正整數N(≤1000)和一個符號,中間以空格分隔。

輸出格式:

首先打印出由給定符號組成的最大的沙漏形狀,最后在一行中輸出剩下沒用掉的符號數。

輸入樣例:

19 *

輸出樣例:

************ ***** 2

?這題不會,題目沒理解透徹,做出來也是全錯!!

//

7-12 組合數的和

分數 15

作者 陳越

單位 浙江大學

給定 N 個非 0 的個位數字,用其中任意 2 個數字都可以組合成 1 個 2 位的數字。要求所有可能組合出來的 2 位數字的和。例如給定 2、5、8,則可以組合出:25、28、52、58、82、85,它們的和為330。

輸入格式:

輸入在一行中先給出 N(1 < N < 10),隨后一行給出 N 個不同的非 0 個位數字。數字間以空格分隔。

輸出格式:

輸出所有可能組合出來的2位數字的和。

輸入樣例:

3 2 8 5

輸出樣例:

330

答案:

#include <stdio.h> int main() {int a[10],n,sum=0;scanf("%d",&n);for(int i=0;i<n;i++)scanf("%d",&a[i]);for(int i=0;i<n;i++){for(int j=0;j<n;j++){if(j!=i)sum+=a[i]*10+a[j];}}printf("%d",sum); }

?

7-13 考試周

分數 5

作者 陳越

單位 浙江大學

考試周快到了,浙江大學的電子屏又調皮了…… 本題請你幫小編寫一個自動倒計時的程序,對給定的日期(例如“臘八”就對應 8)和倒計時天數(例如電子屏上的“四天之后”就對應 4),自動調整公式里的分母(例如 8/2=4 里面的那個 2)。

輸入格式:

輸入在一行中給出兩個正整數:A 是給定的日期,不超過 30;B 是倒計時天數,不超過 10。

輸出格式:

在一行中輸出公式 A/X=B,其中 X 是滿足等式的數字,輸出時保留小數點后 1 位即可。

輸入樣例:

8 3

輸出樣例:

8/2.7=3

答案:

#include <stdio.h> int main() {int m,n;scanf("%d %d",&m,&n);double a=m*1.0/n*1.0;printf("%d/%.1lf=%d",m,a+0.005,n);return 0; }

?

7-14 Cassels方程

分數 10

作者 陳越

單位 浙江大學

Cassels方程是一個在數論界產生了巨大影響的不定方程:x2+y2+z2=3xyz。該方程有無窮多自然數解。

本題并不是要你求解這個方程,只是判斷給定的一組 (x,y,z) 是不是這個方程的解。

輸入格式:

輸入在第一行給出一個不超過 10 的正整數 N,隨后 N 行,每行給出 3 個正整數 0<x≤y≤z≤1000。

輸出格式:

對于每一組輸入,如果是一組解,就在一行中輸出 Yes,否則輸出 No。

輸入樣例:

2 1 1 1 5 6 7

輸出樣例:

Yes No

?答案:

#include <stdio.h> int main() {int t;scanf("%d",&t);for(int i=0;i<t;i++){int x,y,z;scanf("%d %d %d",&x,&y,&z);if(x*x+y*y+z*z==3*x*y*z)printf("Yes\n");elseprintf("No\n"); }return 0; }

7-15 字母串

分數 15

作者 陳越

單位 浙江大學

英語老師要求學生按照如下規則寫一串字母:

  • 如果寫了某個大寫字母,下一個就必須寫同個字母的小寫,或者寫字母表中下一個字母的大寫;
  • 如果寫了某個小寫字母,下一個就必須寫同個字母的大寫,或者寫字母表中前一個字母的小寫;
  • 當然也可以什么都不寫,就結束這個字母串。

例如 aAaABCDdcbBC 就是一個合法的字母串;而 dEFfeFGhI 就是非法的。注意 a 沒有前一個字母, Z 也沒有下一個字母。

現在面對全班學生交上來的作業,老師請你寫個程序自動批改。

輸入格式:

輸入在第一行給出一個不超過 100 的正整數 N。隨后 N 行,每行給出一位學生的作業,即僅由英文字母組成的非空字母串,長度不超過 2×106。

輸出格式:

對每位學生的作業,如果正確就在一行中輸出 Y,否則輸出 N。

輸入樣例:

2 aAaABCDdcbBC dEFfeFGhI

輸出樣例:

Y N

這題不行,做出來只對了一半!!!有機會再修訂吧(懶癌患者)

答案 :

#include <stdio.h> #include <string.h> int main() {int t;scanf("%d",&t);for(int i=0;i<t;i++){char arr[100];scanf("%s",&arr);int a=strlen(arr);int cnt=0;for(int j=0;j<a;j++){if(arr[j]>='A'&&arr[j]<='Z'){if(arr[j+1]==arr[j]+1&&arr[j]!='Z'||arr[j+1]==arr[j]+32){cnt=1; // printf("%c",arr[j]);}else if(j!=a-1){cnt=0;break;}}else if(arr[j]>='a'&&arr[j]<='z'){if(arr[j+1]==arr[j]-1&&arr[j]!='a'||arr[j+1]==arr[j]-32){cnt=1; // printf("%c",arr[j]);} else if(j!=a-1){cnt=0;break;}}else{cnt=0;break;}}if(cnt==1)printf("Y\n");elseprintf("N\n");}return 0; }

7-16 調和平均

分數 10

作者 陳越

單位 浙江大學

N 個正數的算數平均是這些數的和除以 N,它們的調和平均是它們倒數的算數平均的倒數。本題就請你計算給定的一系列正數的調和平均值。

輸入格式:

每個輸入包含 1 個測試用例。每個測試用例第 1 行給出正整數 N (≤1000);第 2 行給出 N 個正數,都在區間 [0.1,100] 內。

輸出格式:

在一行中輸出給定數列的調和平均值,輸出小數點后2位。

輸入樣例:

8 10 15 12.7 0.3 4 13 1 15.6

輸出樣例:

1.61

答案:

#include <stdio.h> int main() {int t;double arr[1000],sum=0;scanf("%d",&t);for(int i=0;i<t;i++){scanf("%lf",&arr[i]);sum+=1/arr[i];}printf("%.2f",1/(sum/t));return 0; }

?

7-17 西安距離

分數 10

作者 翁愷

單位 浙江大學

小明來到了古都西安,想去參觀大唐西市!

西安的道路可以看做是與x軸或y軸垂直的直線,小明位于(a,b),而目的地位于(c,d),問最少幾步可以到達。

輸入格式:

一行中四個整數,a,b,c,d,表示坐標為(a,b)與(c,d),這里0<=a,b,c,d<=1000

輸出格式:

輸出這兩個點的西安距離。

輸入樣例:

0 0 3 4

輸出樣例:

7

答案:

#include <stdio.h> #include <math.h> int main() {int a,b,c,d;scanf("%d %d %d %d",&a,&b,&c,&d);int sum=abs(c-a)+abs(d-b);printf("%d",sum);return 0; }

?

?

7-18 乘法口訣數列

分數 20

作者 陳越

單位 浙江大學

本題要求你從任意給定的兩個 1 位數字 a1? 和 a2? 開始,用乘法口訣生成一個數列 {an?},規則為從 a1? 開始順次進行,每次將當前數字與后面一個數字相乘,將結果貼在數列末尾。如果結果不是 1 位數,則其每一位都應成為數列的一項。

輸入格式:

輸入在一行中給出 3 個整數,依次為 a1?、a2? 和 n,滿足 0≤a1?,a2?≤9,0<n≤103。

輸出格式:

在一行中輸出數列的前 n 項。數字間以 1 個空格分隔,行首尾不得有多余空格。

輸入樣例:

2 3 10

輸出樣例:

2 3 6 1 8 6 8 4 8 4

答案:

#include <stdio.h> int main() {int a,b,n,m=2;scanf("%d %d %d",&a,&b,&n);int arr[10000];arr[0]=a,arr[1]=b;for(int i=0;i<n;i++){int a=arr[i]*arr[i+1];if(a>9){arr[m]=a/10;m++;arr[m]=a%10;m++;}else{arr[m]=a;m++;}printf("%d",arr[i]);if(i!=n-1)printf(" ");}return 0; }

?

7-19 誰能進圖書館

分數 10

作者 陳越

單位 浙江大學

為了保障安靜的閱讀環境,有些公共圖書館對兒童入館做出了限制。例如“12 歲以下兒童禁止入館,除非有 18 歲以上(包括 18 歲)的成人陪同”?,F在有兩位小/大朋友跑來問你,他們能不能進去?請你寫個程序自動給他們一個回復。

輸入格式:

輸入在一行中給出 4 個整數:

禁入年齡線 陪同年齡線 詢問者1的年齡 詢問者2的年齡

這里的禁入年齡線是指嚴格小于該年齡的兒童禁止入館;陪同年齡線是指大于等于該年齡的人士可以陪同兒童入館。默認兩個詢問者的編號依次分別為 1 和 2;年齡和年齡線都是 [1, 200] 區間內的整數,并且保證 陪同年齡線 嚴格大于 禁入年齡線。

輸出格式:

在一行中輸出對兩位詢問者的回答,如果可以進就輸出 年齡-Y,否則輸出 年齡-N,中間空 1 格,行首尾不得有多余空格。

在第二行根據兩個詢問者的情況輸出一句話:

  • 如果兩個人必須一起進,則輸出 qing X zhao gu hao Y,其中 X 是陪同人的編號, Y 是小孩子的編號;
  • 如果兩個人都可以進但不是必須一起的,則輸出 huan ying ru guan;
  • 如果兩個人都進不去,則輸出 zhang da zai lai ba;
  • 如果一個人能進一個不能,則輸出 X: huan ying ru guan,其中 X 是可以入館的那個人的編號。

輸入樣例 1:

12 18 18 8

輸出樣例 1:

18-Y 8-Y qing 1 zhao gu hao 2

輸入樣例 2:

12 18 10 15

輸出樣例 2:

10-N 15-Y 2: huan ying ru guan

這題彎彎繞繞有點多,把思路理清楚就好啦?

?答案:

#include<stdio.h> int main() {int a,b,c,d;scanf("%d %d %d %d",&a,&b,&c,&d);if(c>=a&&d>=a) //兩個人的年齡都大于等于禁入年齡線 {printf("%d-Y %d-Y\n",c,d);printf("huan ying ru guan");}else if(c>=a&&d<a) //第一個人大于等于禁入年齡線 第二人小于 {if(c>=b) //第一個人大于等于陪同年齡線 {printf("%d-Y %d-Y\n",c,d);printf("qing 1 zhao gu hao 2");} else //第一個人小于陪同年齡線 {printf("%d-Y %d-N\n",c,d);printf("1: huan ying ru guan");} }else if(d>=a&&c<a) //第二個人大于等于禁入年齡線 第一人小于 {if(d>=b) //第二個人大于等于陪同年齡線 {printf("%d-Y %d-Y\n",c,d);printf("qing 2 zhao gu hao 1");} else //第二個人小于陪同年齡線 {printf("%d-N %d-Y\n",c,d);printf("2: huan ying ru guan");} }else //兩個人都小于禁入年齡線 {printf("%d-N %d-N\n",c,d);printf("zhang da zai lai ba");} return 0; }

7-20 試試手氣

分數 15

作者 陳越

單位 浙江大學

我們知道一個骰子有 6 個面,分別刻了 1 到 6 個點。下面給你 6 個骰子的初始狀態,即它們朝上一面的點數,讓你一把抓起搖出另一套結果。假設你搖骰子的手段特別精妙,每次搖出的結果都滿足以下兩個條件:

  • 1、每個骰子搖出的點數都跟它之前任何一次出現的點數不同;
  • 2、在滿足條件 1 的前提下,每次都能讓每個骰子得到可能得到的最大點數。

那么你應該可以預知自己第 n 次(1≤n≤5)搖出的結果。

輸入格式:

輸入第一行給出 6 個骰子的初始點數,即 [1,6] 之間的整數,數字間以空格分隔;第二行給出搖的次數 n(1≤n≤5)。

輸出格式:

在一行中順序列出第 n 次搖出的每個骰子的點數。數字間必須以 1 個空格分隔,行首位不得有多余空格。

輸入樣例:

3 6 5 4 1 4 3

輸出樣例:

4 3 3 3 4 3

樣例解釋:

這 3 次搖出的結果依次為:

6 5 6 6 6 6 5 4 4 5 5 5 4 3 3 3 4 3

?答案:

#include <stdio.h> int main() {int a[7] = {0} ; //裝6個骰子的初始的點數int b[7];int n;for (int i = 0; i < 6; i++){scanf("%d",&b[i]);a[i] = b[i];}scanf("%d",&n);for (int i = 0; i < n; i++){for (int j = 0; j < 6; j++){if (i == 0)//第一次搖骰子{if (b[j] != 6)b[j] = 6;elseb[j]--;}else if (i != 0){if (b[j] - 1 == a[j]) b[j] = b[j] - 2;elseb[j]--;}}}for (int i = 0; i < 6; i++){if (i < 5)printf("%d ",b[i]);elseprintf("%d\n",b[i]);}return 0; }

就這些題了,有幾道看不懂就沒寫,希望有大佬的話能幫我指點一二,在此謝謝各位觀看

總結

以上是生活随笔為你收集整理的C语言期末题集的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。