其他各類實訓答案的目錄見這裏
答案查詢的入口見這裏
答案獲取的方法簡介見這裏
並不是所有的關卡都有答案,有些只有部分關卡有,因爲金幣不太夠…
在電腦網頁介面的右側,有個文章目錄,可以在那裏查一下要找的實訓標題
解題程式碼
// 包含標準輸入輸出函數庫
#include <stdio.h>
// 定義main函數
int main()
{
// 請在下面 下麪編寫將字元輸出三遍的程式程式碼
/********** Begin *********/
char x = getchar();
putchar(x);
putchar(x);
putchar(x);
putchar('!');
/********** End **********/
return 0;
}
解題程式碼
//包含標準輸入輸出函數庫
#include <stdio.h>
int main()
{
//宣告兩個整型變數,用於儲存輸入的兩個整數
int x,y;
//請在Begin-End之間新增你的程式碼,按要求格式輸出四則運算式子
/********** Begin *********/
scanf("%d%d",&x,&y);
printf("%5d + %-5d = %10d\n", x, y, x + y);
printf("%5d - %-5d = %10d\n", x, y, x - y);
printf("%5d * %-5d = %10d\n", x, y, x * y);
printf("%5d / %-5d = %10d", x, y, x / y);
/********** End **********/
return 0;
}
解題程式碼
// 包含I/O流庫iostream
#include <iostream>
// 載入命名空間std
using namespace std;
int main()
{
// 宣告三個變數,分別用來儲存年、月、日
int y, m, d;
// 請在Begin-End之間新增你的程式碼,輸入你的生日,並按指定格式輸出資訊。
/********** Begin *********/
cin >> y >> m >> d;
cout << "Hello! " << m << " " << d << " " << y;
/********** End **********/
return 0;
}
解題程式碼
#include <iostream>
// 包含流操作運算元庫
#include <iomanip>
using namespace std;
// 定義常數PI,後面可以直接用PI代替後面的數值
#define PI 3.14159265358979323846
int main()
{
int n;
// 請在Begin-End之間新增你的程式碼,輸入n,按不同的精度輸出 PI。
/********** Begin *********/
// 輸入n
cin >> n;
// 輸出PI
cout << setiosflags(ios::fixed) << setprecision(n) << PI << endl;
cout << setprecision(n + 1) << PI << endl;
cout << setprecision(n + 2) << PI << endl;
cout << setprecision(n + 3) << PI << endl;
cout << setprecision(n + 4) << PI;
/********** End **********/
return 0;
}
解題程式碼
// 包含兩種I/O庫,可以使用任一種輸入輸出方式
#include <stdio.h>
#include <iostream>
using namespace std;
int main()
{
int year;
// 請在此新增程式碼,判斷輸入的年份是否位閏年,是則輸出"Yes",否則輸出"No"
/********** Begin *********/
cin >> year;
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)
cout << "Yes";
else
cout << "No";
/********** End **********/
return 0;
}
解題程式碼
// 包含兩種I/O庫,可以使用任一種輸入輸出方式
#include <stdio.h>
#include <iostream>
using namespace std;
int main()
{
// n-輸入的數,m-重排後的數
int n, m;
// 請在此新增程式碼,輸入一個小於1000的正整數,重排出最大的數存入m中
/********** Begin *********/
cin >> n;
int a = n % 10, b, c, t;
n = n / 10;
b = n % 10;
c = n / 10;
if (a < b)
{
t = a; a = b; b = t;
}
if (a < c)
{
t = a; a = c; c = t;
}
if (b < c)
{
t = b; b = c; c = t;
}
m = a * 100 + b * 10 + c;
/********** End **********/
// 輸出重排後的數
cout << m << endl;
return 0;
}
解題程式碼
// 包含兩種I/O庫,可以使用任一種輸入輸出方式
#include <stdio.h>
#include <iostream>
using namespace std;
int main()
{
int n;
// 請在此新增程式碼,輸出整數進入黑洞過程
/********** Begin *********/
cin >> n;
int k = 1;
while(1)
{
int a = n % 10, b, c, t;
n = n / 10;
b = n % 10;
c = n / 10;
if(a < b)
{
t = a; a = b; b = t;
}
if(a < c)
{
t = a; a = c; c = t;
}
if(b < c)
{
t = b; b = c; c = t;
}
t = a * 100 + c - c * 100 - a;
if(t != 495)
cout << k << ":" << a * 100 + b * 10 + c <<"-" << a + b * 10 + c * 100 << "=" << t << endl;
if( t == 495)
cout << k << ":" << a * 100 + b * 10 + c <<"-" << a + b * 10 + c * 100 << "=" << t << endl;
k++;
n = t;
if(t == 495)
break;
}
/********** End **********/
return 0;
}
解題程式碼
本關任務對應參考程式碼實現如下:
// 包含兩種I/O庫,可以使用任一種輸入輸出方式
#include <stdio.h>
#include <iostream>
using namespace std;
int main()
{
int n;
// 請在此新增程式碼,輸入正整數n,如果n是素數則輸出「Yes」,否則輸出「No」
/********** Begin *********/
cin >> n;
if(n == 1)
{
cout << "No";
return 0;
}
int flag = 1;
for(int i = 2; i * i <= n; i++)
if(n % i == 0)
{
flag = 0;
break;
}
if(flag)
cout << "Yes";
else
cout << "No";
/********** End **********/
return 0;
}
解題程式碼
本關任務對應參考程式碼實現如下:
// 包含兩種I/O庫,可以使用任一種輸入輸出方式
#include <stdio.h>
#include <iostream>
using namespace std;
int main()
{
int n, k;
// 請在此新增程式碼,輸入n和k,並輸出n以內k個素數以及它們的和
/********** Begin *********/
cin >> n >> k;
int t, m = 0, sum = 0;
for(t = n; t >= 2; t--)
{
int flag = 1;
for(int i = 2; i * i <= t; i++)
if(t % i == 0)
{
flag = 0;
break;
}
if(flag)
{
cout << t << " ";
m++;
sum += t;
if(m == k)
break;
}
}
cout << sum;
/********** End **********/
return 0;
}
解題程式碼
#include <iostream>
using namespace std;
// foldTimes-計算建紙橋的摺疊次數
// 參數:dis-星際距離(千米),thick-紙的厚度(毫米)
// 返回值:建橋需要摺疊的次數
int foldTimes(double dis, double thick);
int main()
{
double dis, thick;
cin >> dis >> thick;
cout << "需要摺疊" << foldTimes(dis,thick) << "次" << endl;
return 0;
}
int foldTimes(double dis, double thick)
{
// 請在這裏補充程式碼,實現函數foldTimes
/********** Begin *********/
thick = thick / 1000.0; // 調整單位爲米
dis = dis * 1000.0; // 調整單位爲米
int t = 0; // 摺疊次數
while(thick < dis)
{
t++;
thick *= 2;
}
return t;
/********** End **********/
}
解題程式碼
#include <iostream>
using namespace std;
void whatTime(int secs, int &h, int &m, int &s)
{
// 請在這裏補充程式碼,設計並實現函數whatTime,使main函數中的函數呼叫正確
/********** Begin *********/
h = secs / 3600;
secs = secs % 3600;
m = secs / 60;
s = secs % 60;
/********** End **********/
}
int main()
{
int secs; // secs秒錶上的秒數
int h, m, s; // 當前時間:h-小時,m-分,s-秒
cin >> secs; // 輸入秒錶上的秒數
whatTime(secs,h,m,s); // 計算當前時間
cout << h << ":" << m << ":" << s << endl; // 輸出當前時間
return 0;
}
解題程式碼
#include <iostream>
using namespace std;
// 函數leapYear
int leapYear(int y)
{
if(y % 4 == 0 && y % 100 != 0 || y % 400 == 0)
return 1;
return 0;
}
// 函數whatDay:計算某年某月某日是星期幾
// 參數:year-年,month-月
// 返回值:--7分別表示星期一到星期日
int whatDay(int year, int month)
{
// 請在這裏補充程式碼,實現函數whatDay
/********** Begin *********/
// 1年月日是星期一
int w = 1;
int i;
// 1到year-1都是全年
for(i = 1; i < year; i++)
{
if(leapYear(i))
w += 366;
else
w += 365;
}
switch(month)
{
case 12:
w += 30;
case 11:
w += 31;
case 10:
w += 30;
case 9:
w += 31;
case 8:
w += 31;
case 7:
w += 30;
case 6:
w += 31;
case 5:
w += 30;
case 4:
w += 31;
case 3:
if(leapYear(year))
w += 29;
else
w += 28;
case 2:
w += 31;
case 1: // 1月不加了
;
}
w = w % 7; // 得到-6,其中爲星期天
// 調整星期天
if(w == 0)
w = 7;
return w;
/********** End **********/
}
int main()
{
int y, m, xq; // 年、月、星期幾
cin >> y >> m; // 輸入年月
xq = whatDay(y,m); // 計算星期幾
cout << y << "年" << m << "月1日是星期"; // 輸出星期
if(xq == 7)
cout << "日" << endl;
else
cout << xq << endl;
return 0;
}
解題程式碼
// 包含兩種I/O庫,可以使用任一種輸入輸出方式
#include <stdio.h>
#include <iostream>
using namespace std;
// 函數printMonth:按要求的格式列印某年某月的日曆
// 參數:year-年,month-月
// 返回值:無
void printMonth(int year, int month);
// leapYear:判斷閏年
// 參數:y-年
// 返回值:1-是閏年,0-不是閏年
int leapYear(int y)
{
if(y % 4 == 0 && y % 100 != 0 || y % 400 == 0)
return 1;
return 0;
}
// 函數whatDay:計算某年某月的1號是星期幾
// 參數:year-年,month-月
// 返回值:1到7--星期1到星期日
int whatDay(int year, int month)
{
// 1年月日是星期一
int w = 1;
int i;
// 1到year-1都是全年
for(i = 1; i < year; i++)
{
if(leapYear(i))
w += 366;
else
w += 365;
}
switch(month)
{
case 12:
w += 30;
case 11:
w += 31;
case 10:
w += 30;
case 9:
w += 31;
case 8:
w += 31;
case 7:
w += 30;
case 6:
w += 31;
case 5:
w += 30;
case 4:
w += 31;
case 3:
if(leapYear(year))
w += 29;
else
w += 28;
case 2:
w += 31;
case 1: // 1月不加了
;
}
w = w % 7; // 得到-6,其中爲星期天
// 調整星期天
if(w == 0)
w = 7;
return w;
}
// 請在下面 下麪補充程式碼,實現函數printMonth
/*************** Begin **************/
// 函數days:計算某年某月有多少天
// 參數:year-年,month-月
// 返回值:該年該月的天數
int days(int year, int month)
{
switch(month)
{
case 1:case 3:case 5:case 7: case 8:case 10: case 12:
return 31;
case 2: // 考慮閏年
if(leapYear(year))
return 29;
return 28;
default:
return 30;
}
}
void printMonth(int year, int month)
{
printf(" 一 二 三 四 五 六 日\n"); // 輸出頭部資訊
int w = whatDay(year, month); // 這個月的1號是星期幾
int i;
// 1號前輸出w-1個空位
for(i = 0; i < w - 1; i++)
printf("%4c",' ');
// 輸出每一個日期
for(i = 1; i <= days(year,month); i++)
{
printf("%4d",i);
// 空位數加日期數是 7 的倍數則輸出換行符
if((i + w - 1) % 7 == 0)
printf("\n");
}
// 如果最後沒有輸出換行符,則輸出一個
if((i + w - 1) % 7 != 0)
printf("\n");
}
/*************** End **************/
int main()
{
int y, m; // 年、月
cin >> y >> m; // 輸入年月
printMonth(y,m); // 輸出該年月的日曆
return 0;
}
解題程式碼
#include <iostream>
using namespace std;
// 遞回函數splitNum:順序輸出n的各位數位,每個數位佔一行
// 返回值:無
void splitNum(unsigned int n)
{
// 請在這裏補充程式碼,實現遞回函數splitNum
/********** Begin *********/
if(n>9)
splitNum(n/10);
cout<<n%10<<endl;
/********** End **********/
}
int main()
{
unsigned n;
cin >> n; // 輸入正整數n
splitNum(n); // 呼叫splitNum函數,順序輸出n的各位數位
return 0;
}
解題程式碼
#include <stdio.h>
#include <iostream>
using namespace std;
int main()
{
int n, a[30], i; // 定義變數及陣列,n-銷售額個數,a-銷售額
cin >> n; // 輸入銷售額數量,n <= 30
// 輸入n個銷售額,分別存入a[0]到a[n-1]
for(i = 0; i < n; i++)
cin >> a[i];
// 請在此新增程式碼,計算並輸出銷售額的波動情況
/********** Begin *********/
for(i = 0; i < n - 1; i++)
{
if(i == 0)
cout << a[i + 1] - a[i];
else
cout << " " << a[i + 1] - a[i];
}
cout << endl;
/********** End **********/
return 0;
}
解題程式碼
// 請在此新增程式碼,通過統計朋友圈點贊,統計個人愛好功能
/********** Begin *********/
#include <iostream>
using namespace std;
int main()
{
int i, j, t;
// 定義標籤表,bq[i]存放標籤i出現的次數,開始都是次
int bq[1001] = {0};
int N, K;
// 輸入點贊文章數
cin >> N;
// 逐個處理每篇文章
for(i = 0; i < N; i++)
{
// 輸入文章標籤數
cin >> K;
for(j = 0; j < K; j++)
{
// 讀入一個標籤
cin >> t;
// 加到標籤表中
bq[t]++;
}
}
// 查詢出現最多的最大標籤
int maxx = 0, index = -1;
for(i = 0; i < 1001; i++)
{
if(bq[i] >= maxx)
{
maxx = bq[i];
index = i;
}
}
// 輸出標籤及次數
cout << index << " " << maxx << endl;
return 0;
}
// 參數:a-100*100的二維陣列,用來儲存n行n列的陣列(<n<100),儲存在其~n-1行和~n-1列,
// m-回圈右移的位數(0<m<n)
// 返回值:無,回圈右移的結果寫入原二維陣列中
void rotateLeft(int a[][100],int n,int m)
{
int t[100];
int i, j, k;
for(i = 0; i < m; i++)
{
// 快取第一列
for(k = 0; k < n;k++)
t[k] = a[k][0];
// 左移
for(j = 0; j < n - 1; j++)//列
for(k = 0; k < n; k++)//行
a[k][j] = a[k][j+1];
// t放回最後一列
for(k = 0; k < n; k++)
a[k][n-1] = t[k];
}
}
/********** End **********/
解題程式碼
請將以下程式碼直接拷貝到右側相應位置:
// 求1到n間所有整數的和
int SumOfNumber(int n)
{
int sum = 0;
for(int i = 1;i <= n;i ++)
{
sum = sum + i;
}
return sum;
}
解題程式碼
請將以下程式碼直接拷貝到右側相應位置:
// 求s=a+aa+aaa+aaaa+aa...a的值
int FunCal(int a, int n)
{
int c,s,sum;
for (s = 0,c = 1,sum = 0;c <= n;c ++)
{
s = 10 * s + a;
sum = sum + s;
}
return sum;
}
解題程式碼
請將以下程式碼直接拷貝到右側相應位置:
// 計算1!+2!+3!+...+n!的值
double FactorialSum(int n)
{
int sum = 1;
double result = 1;
for(int i = 2; i <= n; i++)
{
sum *= i;
result += sum;
}
return result;
}
解題程式碼
// 包含字串函數庫
#include <string.h>
#include <iostream>
using namespace std;
int frequency(char * substr, char * str);
int main()
{
char sub[128],str[1024];
cin.getline(sub,128); // 輸入子串
cin.getline(str,1024); // 輸入長串
int n = frequency(sub,str); // 呼叫frequency函數,計運算元串在長串中出現的次數
cout<<n<<endl; // 輸出次數
return 0;
}
// 函數frequency:計運算元串在長串中出現的次數
// 參數:substr-指向子串,str-指向長串
// 返回值:出現的次數
int frequency(char * substr, char * str)
{
// 請在此新增程式碼,實現函數frequency
/********** Begin *********/
int n=strlen(substr);
int t=0;
char *p=str;
while(p=strstr(p,substr))
{
t++;
p=p+n;
}
return t;
/********** End **********/
}
解題程式碼
#include <iostream>
using namespace std;
void strmncpy(char *s, int m, int n, char *t);
int main()
{
char s[128],t[128];
int m,n;
cin>>s; // 輸入源串
cin>>m>>n; // 輸入m和n
strmncpy(s, m, n, t); // 字串複製
cout << t <<endl; // 輸出複製結果
return 0;
}
// 函數strmncpy:字串的部分複製,將s指向字串從第m個字元開始的n個字元複製的t中
// 參數:s-指向源字串,t-指向目標字串,m-起始位置,n-字元個數
// 返回值:無
void strmncpy(char *s, int m, int n, char *t)
{
// 請在此新增程式碼,實現函數strmncpy
/********** Begin *********/
int k=0;
while(s[k]!=0)k++;
if(k<=m)
{
*t='\0';
return;
}
char *p=s+m;
for(int i=0;i<n;i++)
{
*t=*p;
if(*t=='\0')
return;
t++;
p++;
}
*t='\0';
/********** End **********/
}
解題程式碼
#include "linearList.h"
node *insertTail(node *h, node *t)
{
// 請在此新增程式碼,補全函數insertTail
/********** Begin *********/
if(h == NULL) // 空鏈表單獨處理
{
t->next = NULL; // 鏈表尾指針置爲NULL
return t; // 返回第一個結點的地址(即鏈表頭指針)
}
// 非空鏈表的情況
node *p = h;
// 讓p指向最後一個結點
while(p->next)
p = p->next;
p->next = t; // 讓最後一個結點的指針域指向結點t
t->next = NULL; // 鏈表尾指針置爲NULL
return h; // 返回第一個結點的地址(即鏈表頭指針)
/********** End **********/
}
解題程式碼
#include "linearList.h"
node * insertHead(node *h, node *t)
{
// 請在此新增程式碼,補全函數insertHead
/********** Begin *********/
t->next = h;
return t;
/********** End **********/
}
解題程式碼
#include "linearList.h"
node * insertSort(node *h, node *t)
{
// 請在此新增程式碼,補全函數insertSort
/********** Begin *********/
node *p = NULL, *q = h; // 定位第一個插入點:鏈首
// 查詢插入點
while(q && q->data < t->data)
{ // 兩個指針並行後移
p = q;
q = q->next;
}
// 插入鏈首
if(p == NULL)
{
t->next = h;
return t;
}
// 插入鏈尾
if(q == NULL)
{
p->next = t;
t->next = NULL;
}
// 插入p、q之間
t->next = q;
p->next = t;
return h;
/********** End **********/
}
解題程式碼
#include "linearList.h"
node * search(node * h, int num)
{
// 請在此新增程式碼,補全函數search
/********** Begin *********/
while(h)
{ // h爲真,即 h 指向的結點存在
if(h->data == num)
return h;
h = h->next; // 將該結點的指針域賦值給 h,h 就指向了下一個結點
}
return NULL; // 沒找到包含 num 的結點
/********** End **********/
}
解題程式碼
#include "linearList.h"
node * delAt(node * h, int i)
{
// 請在此新增程式碼,補全函數delAt
/********** Begin *********/
// 序號非法,不刪除
if(i<0)
return h;
node *p = NULL, *q = h; // 定位刪除結點,試圖讓 q 指向要刪除結點,p 指向其前面的結點
for(int k = 0; k < i; k++)
{
if(q->next == NULL) // 後面沒有結點了,序號非法
return h;
p = q;
q = q->next;
}
if(p){ // p 指向的結點存在,不是刪除首結點
// 刪除 q 指向的結點,讓 p 指向結點的指針域指向 q 的後續結點
p->next = q->next;
// 釋放空間
delete q;
return h;
}else // 刪除首結點
{
h = q->next; // 下一個結點成了首結點
// 釋放空間
delete q;
return h;
}
/********** End **********/
}
解題程式碼
#include "linearList.h"
node * delHas(node * h, int n)
{
// 請在此新增程式碼,補全函數delHas
/********** Begin *********/
node *p = NULL, *q = h; // p 爲要刪除結點的前結點,q 指向要刪除結點
while(q)
{ // h 爲真,即 h 指向的結點存在
if(q->data == n)
break; // 找到了
if(q->next == NULL) // 後面沒有結點了,沒有結點滿足條件
return h; // 不刪除,直接返回
// 繼續往後找,兩個指針一起後移
p = q;
q = q->next;
}
// 刪除 q 指向的結點
if(p == NULL) // 刪除頭結點
{
h = q->next; // 下一個結點變成頭結點
delete q; // 刪除結點
return h;
}
// 不是頭結點
p->next = q->next; // 把 q 指向結點的指針域( q 後面結點的地址)賦值給 p 指向結點的指針域
return h;
/********** End **********/
}
解題程式碼
#include "linearList.h"
int listLength(node * h)
{
// 請在此新增程式碼,補全函數listLength
/********** Begin *********/
int n = 0;
while(h)
{
n++;
h = h->next;
}
return n;
/********** End **********/
}
解題程式碼
#include "mstack.h"
// 函數empty:判斷棧sk是否爲空
// 參數:sk-棧
// 返回值:true-sk爲空,false-sk不爲空
bool empty(intStack sk)
{
// 請在此新增程式碼,補全函數empty
/********** Begin *********/
return (listLength(sk) == 0); // 鏈表長度爲 0,則棧爲空
/********** End **********/
}
// 函數pop:彈棧
// 參數:sk-棧,傳參照,彈棧可能會改變sk的值
// 返回值:彈棧的彈出的整數,如果棧空,返回-1
int pop(intStack &sk)
{
// 請在此新增程式碼,補全函數pop
/********** Begin *********/
if(empty(sk)) // 棧空,返回-1
return -1;
int n = sk->data; // 獲取棧頂結點(鏈首結點)的數據
sk = delAt(sk,0); // 刪除首結點(彈棧,第一個結點出棧)
return n; // 返回彈棧數據
/********** End **********/
}
// 函數push:壓棧,將整數n壓入棧sk中
// 參數:sk-棧,傳參照,壓棧會改變sk的值,n-要壓棧的整數
// 返回值:無,採用鏈表實現棧,只要還有記憶體,壓棧都會成功
void push(intStack &sk, int n)
{
// 請在此新增程式碼,補全函數push
/********** Begin *********/
node *p = new node; // 建立要壓棧的結點
p->data = n;
sk = insertHead(sk,p); // 壓棧(插入鏈首)
/********** End **********/
}
解題程式碼
#include "mqueue.h"
// 函數queueEmpty:判斷佇列iq是否爲空
// 參數:iq-整數佇列
// 返回值:true-佇列iq爲空,false-iq不爲空
bool queueEmpty(intQueue iq)
{
// 請在此新增程式碼,補全函數queueEmpty
/********** Begin *********/
return (iq==NULL); // iq 爲 NULL,則佇列爲空
/********** End **********/
}
// 函數enQueue:將整數num入列到iq
// 參數:iq-整數佇列,傳參照,入列有可能改變佇列頭指針,num-入列的整數
// 返回值:無,只要還有記憶體,入列總會成功
void enQueue(intQueue &iq, int num)
{
// 請在此新增程式碼,補全函數enQueue
/********** Begin *********/
node *t=new node; // 準備結點
t->data=num;
t->next=NULL;
iq = insertTail(iq,t); // 結點插入到尾部
/********** End **********/
}
// 函數deQueue:出列
// 參數:iq-整數佇列,傳參照,出列有可能改變佇列頭指針
// 返回值:出列結點的數據,如果佇列爲空,返回-1
int deQueue(intQueue &iq)
{
// 請在此新增程式碼,補全函數deQueue
/********** Begin *********/
if(queueEmpty(iq))
return -1;
int n = iq->data; // 獲取佇列頭結點的數據
iq = delAt(iq,0); // 刪除佇列頭結點(出列)
return n; // 返回出列數據
/********** End **********/
}
解題程式碼
#include "mset.h"
// 函數unionSet:求集合a和b的並集
// 參數:a-集合,b-集合
// 返回值:集合(集合a和b的並集)
intSet unionSet(intSet a, intSet b)
{
// 請在此新增程式碼,補全函數unionSet
/********** Begin *********/
intSet c=NULL; // 準備空集合
// 把 a 中每一個元素加入 c 中
node *p=a;
while(p)
{
addElement(c,p->data);
p=p->next;
}
// 把 b 中每一個元素加入 c 中
p=b;
while(p)
{
addElement(c,p->data);
p=p->next;
}
return c;
/********** End **********/
}
// 函數intersection:求集合a和b的交集
// 參數:a-集合,b-集合
// 返回值:集合(集合a和b的交集)
intSet intersection(intSet a, intSet b)
{
// 請在此新增程式碼,補全函數intersection
/********** Begin *********/
intSet c=NULL; // 準備空集合
// 檢視 a 中每一個元素
node *p=a;
while(p)
{
if(search(b,p->data))
{ // 也在 b 中,則選入集合 c
addElement(c,p->data);
}
p=p->next;
}
return c;
/********** End **********/
}
// 函數addElement:在集合is中增加元素num
// 參數:is-集合,num-要增加的元素
// 返回值:無
void addElement(intSet &is, int num)
{
// 請在此新增程式碼,補全函數addElement
/********** Begin *********/
// 首先確認 num 是否在 is 中
node *p=search(is,num);
if(p!=NULL)
return;
p=new node; // 準備結點
p->data = num;
p->next = NULL;
is = insertHead(is,p);
/********** End **********/
}
解題程式碼
#include <stdio.h>
// 函數extractDigit的功能:從檔案a.txt中提取數值寫入檔案b.txt中
void extractDigit();
// 請在此新增程式碼,實現extractDigit函數
/********** Begin *********/
char readADigit(FILE *fi)
{
char c = fgetc(fi); // 從檔案讀取一個字元
if(c==EOF) // 是結束符則返回
return EOF;
while(c>'9' || c<'0') // 如果不是數位字元,則繼續讀取下一個字元
{
c = fgetc(fi); // 讀取下一個字元
if(c==EOF) // 是結束符則返回
return EOF;
}
return c; // 返回讀取的數位字元
}
// 函數extractDigit的功能:從檔案a.txt中提取數值寫入檔案b.txt中
void extractDigit()
{
FILE *fi = fopen("a.txt","r"); // 以讀的方式開啓檔案a.txt
FILE *fo = fopen("b.txt","w"); // 以寫的方式開啓檔案b.txt
if(fi==NULL || fo==NULL) // 如果某個檔案開啓失敗,則返回
return;
char c;
int num=0,k=0;
c = readADigit(fi); // 讀取一個數字字元
while(c!=EOF)
{
num=num*10+c-'0'; // 計算數位字元構成的整數
k++;
if(k==3) // 已經三位了
{
fprintf(fo,"%d ",num); // 將計算的整數寫入檔案指針fo指向的檔案
k=0; // 重新計數
num=0; // 重新計算
}
c = readADigit(fi); // 讀取下一個數位字元
}
if(k!=0) // 如果有不到三位的數值,則寫入檔案b.txt
{
fprintf(fo,"%d ",num);
}
fclose(fi); // 關閉檔案fi
fclose(fo); // 關閉檔案fo
}
/********** End **********/
解題程式碼
int readClothing(FILE *fp, clothing cloth[])
{
// 請在此新增程式碼,補全函數readClothing
/********** Begin *********/
int n;
// 讀一個整數(服裝資訊數)
fread(&n,sizeof(n),1,fp);
// 讀出n種服裝資訊到cloth中
fread(cloth,sizeof(clothing),n,fp);
return n;
/********** End **********/
}
解題程式碼
#include <iostream>
#include <fstream>
using namespace std;
//函數count:統計檔案fin中每種服裝的銷售總額,並寫入檔案fout中
//參數fin:檔案每種服裝的銷售情況,fout:每種服裝銷售總額的寫入檔案
//返回值:無
//說明:檔案fin中,每種服裝資訊佔一行,分別爲服裝編號,銷售件數,每件的銷售價格(整型)。
//檔案fout:每種服裝統計資訊佔一行,分別爲服裝編號,銷售總額(整型),中間用一個空格隔開。
void count(ifstream & fin, ofstream & fout)
{
// 請在此新增程式碼,補全函數count
/********** Begin *********/
char s[100];
fin>>s;
while(!fin.eof())
{
int i,n,c=0,t;
fin>>n;
for(i=0;i<n;i++)
{
fin>>t;
c+=t;
}
fout<<s<<" "<<c<<endl;
fin>>s;
}
/********** End **********/
}
解題程式碼
int getNumber(ifstream &ifile, char *label)
{
// 請在此新增程式碼,補全函數getNumber
/********** Begin *********/
clothing t;
// 讀出種服裝資訊到t中
ifile.read((char*)&t,sizeof(clothing));
while(!ifile.eof())
{
if(strcmp(label, t.label)==0)
return t.numberRemaining;
ifile.read((char*)&t,sizeof(clothing));
}
return 0;
/********** End **********/
}
解題程式碼
//包含標準輸入輸出函數
#include<stdio.h>
//基本框架如下,請在此新增‘素數判斷’的程式碼
/********** 修改以下程式碼 **********/
int main(){
int isPrime(int a);
int a;
scanf("%d",&a);
if(isPrime(a))
printf("%d是一個素數",a);
else
printf("%d不是一個素數",a);
return 0;
}
int isPrime(int a) {
int t=0;
if(a<=1)
return 0;
for(int b=2;b<a;b++){
if(a%b==0){
t=1;
break;
}
}
if(t==0)
return 1;
else
return 0;
}
解題程式碼
#include <stdio.h>
// 定義main函數
int main()
{
// 請在此新增程式碼
/********** Begin *********/
int i;
double a[7],max=0,min=100,sum=0,num=0;
for(i=0;i<7;i++){
scanf("%lf",&a[i]);
if(max<a[i]) max = a[i];
if(min>a[i]) min = a[i];
}
for(i=0;i<7;i++){
if(a[i]==max||a[i]==min){
if(num<2){
num++;
continue;
}
}
sum+=a[i];
}
printf("score=%.2f",sum/5);
/********** End **********/
return 0;
}
解題程式碼
#include <stdio.h>
// 定義main函數
int main()
{
// 請在此新增程式碼
/********** Begin *********/
int a[11] = {1,4,6,9,11,25,31,46,83,100},n,i,temp;
scanf("%d",&n);
for(i=0;i<10;i++){
if(n<a[i]&&i==0){
printf("%d ",n);
}
printf("%d ",a[i]);
if(n>a[i]&&n<a[i+1]){
printf("%d ",n);
}
}
if(n>a[i-1]&&i==10){
printf("%d ",n);
}
/********** End **********/
return 0;
}
解題程式碼
#include <stdio.h>
#include<string.h>
// 定義main函數
int main()
{
// 請在此新增程式碼
/********** Begin *********/
char a[100];
int zm=0,sz=0,kg=0,qt=0,i;
gets(a);
for(i=0;i<strlen(a);i++){
if('A'<=a[i]&&a[i]<='Z' || 'a'<=a[i]&&a[i]<='z' ){
zm++;
}else if('0'<=a[i]&&a[i]<='9'){
sz++;
}else if(a[i] == ' '){
kg++;
}else{
qt++;
}
}
printf("數位:%d\n",sz);
printf("空格:%d\n",kg);
printf("字母:%d\n",zm);
printf("其他字元:%d",qt);
/********** End **********/
return 0;
}
解題程式碼
#include <stdio.h>
#include<string.h>
// 定義main函數
int main()
{
// 請在此新增程式碼
/********** Begin *********/
char a[100],b[100];
scanf("%s%s",a,b);
if(strcmp(a,b)==0){
printf("%s",a);
}else if(strlen(a)<strlen(b)){
printf("%s",strcat(b,a));
}else{
printf("%s",strcat(a,b));
}
/********** End **********/
return 0;
}
解題程式碼
#include <stdio.h>
#include<string.h>
// 定義main函數
int main()
{
// 請在此新增程式碼
/********** Begin *********/
char a[100],b;
int i;
gets(a);
scanf("%c",&b);
for(i=0;i<strlen(a);i++){
if(a[i]!=b){
printf("%c",a[i]);
}
}
/********** End **********/
return 0;
}
解題程式碼
#include<stdio.h>
#include<math.h>
int main()
{
// 請在此新增你的程式碼
/********** Begin *********/
int a;
scanf("%d",&a);
a=fabs(a);
printf("%d",a);
return 0;
/********** End **********/
}
解題程式碼
#include<stdio.h>
int main(){
// 請在此新增你的程式碼
/********** Begin *********/
int a=1;
int n,sum=0;
scanf("%d",&n);
while(a<=n){
sum=sum+a;
a=a+2;
}
printf("%d",sum);
return 0;
/********** End **********/
}
解題程式碼
#include<stdio.h>
int main(){
// 請在此新增你的程式碼
/********** Begin *********/
int n;
scanf("%d", &n);
if( (n % 3) == 0 || (n/100 % 10) == 3){
printf("%d\n", n);
}else{
printf("排除此數\n");
}
return 0;
/********** End **********/
}
解題程式碼
#include <stdio.h>
int main()
{
// 請在此新增你的程式碼
/********** Begin *********/
float a,b;
scanf("%f",&a);
b=5*1.0/9*(a-32);
printf("攝氏溫度爲:%.2f",b);
/********** End **********/
}
解題程式碼
#include<stdio.h>
int main()
{
/*********begin*********/
int a,b,c,d,e,f,g;
scanf("%d%d",&a,&b);
c=a*a+b*b;
d=a+b;
e=c/100;
f=c/100-e*10;
g=e*10+f;
if(c>100)
printf("%d",g);
else
printf("%d",d);
/*********end*********/
}
解題程式碼
#include<stdio.h>
int main()
{
/*********begin*********/
int x,y;
scanf("%d",&x);
if(x>=85)
printf("成績是%d,相應的等級是A\n",x);
else
if(x>=70&&x<=84)
printf("成績是%d,相應的等級是B\n",x);
else
if(x>=60&&x<=69)
printf("成績是%d,相應的等級是C\n",x);
else
printf("成績是%d,相應的等級是D\n",x);
/*********end*********/
}
解題程式碼
#include<stdio.h>
int main()
{
/*********begin*********/
int a,b;
int sum=0;
scanf("%d,%d",&a,&b);
for (a;a<=b;a++)
{
if(a%11==0||a%7==0)
sum=a+sum;
}
printf("%d",sum);
/*********end*********/
}
解題程式碼
#include <stdio.h>
void main()
{
/*********begin*********/
int runnian(int y)
{
if((y%4==0 && y%100!=0) || y%400==0)
return 1;
return 0;
}
int year;
scanf("%d",&year);
if(runnian(year))
printf("%d年是閏年。",year);
else
printf("%d年不是閏年。",year);
/*********end*********/
}
解題程式碼
#include <stdio.h>
int main()
{
/*********begin*********/
int a,b,c,d;
scanf("%3d",&a);
b=a/100; c=a/10%10; d=a%10;
if
((d==b &&d!=c) ||(d==c&& d!=b) ||(b==c&& d!=c) )
printf("1");
else
printf("0");
/*********end**********/
}
解題程式碼
#include<stdio.h>
int main()
{
/*********begin*********/
int year,month,day,sum=0 ;
scanf("%d-%d-%d", &year, &month, &day);
switch(month)
{
case 12:sum=30+sum;
case 11:sum=31+sum;
case 10:sum=30+sum;
case 9:sum=31+sum;
case 8:sum=31+sum;
case 7:sum=30+sum;
case 6:sum=31+sum;
case 5:sum=30+sum;
case 4:sum=31+sum;
case 3:sum=28+sum;
case 2:sum=31+sum;
case 1:;
}
sum=sum+day;
if (((year % 400 == 0) || (year % 100 != 0 && year % 4 == 0))&& (month>2) )
sum=sum+1;
printf("%d",sum);
/*********end*********/
return 0;
}
解題程式碼
#include <stdio.h>
#include <iostream>
using namespace std;
int main ()
{
// 請在此新增你的程式碼
/********** Begin ********/
double a = 100000 ;
int n,i;
scanf ("%d",&n);
for (i = 1;i<=n;i++)
a = a*(1+0.0375);
printf ("%.2f",a);
return 0;
/********** End **********/
}
解題程式碼
#include <iostream>
using namespace std;
int main()
{
// 請在此新增你的程式碼
/********** Begin ********/
double moleculeWeight = 3e-23;
double quartWeight = 950;
double n;
cin >> n;
double total = n * quartWeight / moleculeWeight;
cout << total ;
return 0;
/********** End **********/
}
解題程式碼
#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
// 請在此新增你的程式碼
/********** Begin ********/
int places;
double a;
cin >> a;
for(places=3;places<=7;places++)
cout<<setprecision(places)<<a<<endl;
return 0;
/********** End **********/
}
解題程式碼
int getSum(int num1, int num2)
{
/********** BEGIN **********/
int sum = 0;
for(int i = num1; i <= num2; i++)
{
int tmp = i;
while(tmp >= 10)
{
sum += (tmp % 10);
tmp /= 10;
}
sum += tmp;
}
return sum;
/********** END **********/
}
解題程式碼
int level = 0; //記錄資料夾層數
/***************************
* func: 遍歷資料夾
* return: void
* @para folderPath: 資料夾路徑
***************************/
void showDirStructure(char *folderPath)
{
/********** BEGIN **********/
level++;
DIR *fd = opendir(folderPath);
if(fd == NULL)
{
cout << "open folder failure!" << endl;
return ;
}
//只列印目錄名
int index = 0;
for(int i = 0; i < strlen(folderPath); i++)
{
if(folderPath[i] == '/')
index = i+1;
}
for(int i = 1; i < level; i++)
cout << " ";
cout << "+--" << &folderPath[index] << endl;
struct dirent *dir;
struct stat statbuf;
while((dir = readdir(fd)) != NULL)
{
if(strcmp(dir->d_name, ".") == 0 || strcmp(dir->d_name, "..") == 0)
continue;
char tmp_name[1024];
sprintf(tmp_name, "%s/%s", folderPath, dir->d_name);
stat(tmp_name, &statbuf);
//判斷是目錄則遞回呼叫開啓函數
if(S_ISDIR(statbuf.st_mode))
showDirStructure(tmp_name);
else if(S_ISREG(statbuf.st_mode))
{
for(int i = 0; i < level; i++)
cout << " ";
cout << "--" << dir->d_name << endl;
}
}
level--;
closedir(fd);
/********** END **********/
}
解題程式碼
int level = 0; //記錄資料夾層數
/***************************
* func: 遍歷資料夾
* return: void
* @para folderPath: 資料夾路徑
***************************/
void showDirStructure(char *folderPath)
{
/********** BEGIN **********/
level++;
DIR *fd = opendir(folderPath);
if(fd == NULL)
{
cout << "open folder failure!" << endl;
return ;
}
//只列印目錄名
int index = 0;
for(int i = 0; i < strlen(folderPath); i++)
{
if(folderPath[i] == '/')
index = i+1;
}
for(int i = 1; i < level; i++)
cout << " ";
cout << "+--" << &folderPath[index] << endl;
struct dirent *dir;
struct stat statbuf;
while((dir = readdir(fd)) != NULL)
{
if(strcmp(dir->d_name, ".") == 0 || strcmp(dir->d_name, "..") == 0)
continue;
char tmp_name[1024];
sprintf(tmp_name, "%s/%s", folderPath, dir->d_name);
stat(tmp_name, &statbuf);
//判斷是目錄則遞回呼叫開啓函數
if(S_ISDIR(statbuf.st_mode))
showDirStructure(tmp_name);
else if(S_ISREG(statbuf.st_mode))
{
//判斷是否爲圖片格式檔案
int length = strlen(dir->d_name);
if(length > 4)
{
char *type = &dir->d_name[length-4];
if(strcmp(type, ".bmp") == 0 || strcmp(type, ".png") == 0 || strcmp(type, ".jpg") == 0)
{
for(int i = 0; i < level; i++)
cout << " ";
cout << "--" << dir->d_name << endl;
}
}
}
}
level--;
closedir(fd);
/********** END **********/
}
解題程式碼
#include<stdio.h>
int main(void)
{
/********* Begin *********/
printf("Hello World");
/********* End *********/
return 0;
}
解題程式碼
#include<stdio.h>
int main(void)
{
/********* Begin *********/
printf(" *\n");
printf(" ***\n");
printf(" OK\n");
printf(" Hello!\n");
printf("*********");
/********* End *********/
return 0;
}
解題程式碼
#include<stdio.h>
int main(void)
{
/********* Begin *********/
int a,b,c,max;
scanf("%d,%d,%d",&a,&b,&c);
max=a;
if(max<b)
max=b;
if(max<c)
max=c;
printf("max=%d",max);
/********* End *********/
return 0;
}
解題程式碼
#include"stdio.h"
int main(void)
{
/********* Begin *********/
int x;
int y=2,z=3;
scanf("%d",&x);
if(x==y+z)
printf("*****");
else
printf("#####" );
/********* End *********/
return 0;
}
解題程式碼
1). num<=999 或 num<1000 或 num <= 999 或 num < 1000
2). num/10%10; 或 (num-bai100)/10; 或 ( num - bai * 100 ) / 10 ; 或 num / 10 % 10 ;
3). num==baibaibai+shishishi+gege*ge 或 num == bai * bai * bai + shi * shi * shi + ge * ge * ge
解題程式碼
1). i<=5 或 i<6
解題思路2
2). k<=10-i 或 k<11-i 或 k<=5-i 或 k<6-i
解題思路3
3). j<=2i-1 或 j<=2i
解題思路1
#include<iostream>
#include<string>
using namespace std;
struct Stu
{
int num;
string name;
float computer;
float english;
};
int main()
{
Stu stu[5];
int i,k_com,j_eng;
float ave_com=0,ave_eng=0,max_com=0,max_eng=0;
for(i=0;i<5;i++)
{
cin>>stu[i].num>>stu[i].name>>stu[i].computer>>stu[i].english;
ave_com+=stu[i].computer;
ave_eng+=stu[i].english;
if(stu[i].computer>max_com)
{
max_com=stu[i].computer;
k_com=i;
}
if(stu[i].english>max_eng)
{
max_eng=stu[i].english;
j_eng=i;
}
}
ave_com/=5;
ave_eng/=5;
cout<<"計算機成績最高分是:"<<stu[k_com].name<<" "\
<<"分數是:"<<stu[k_com].computer<<"分"<<endl;
cout<<"全班計算機成績平均成績是:"<<ave_com<<"分"<<endl;
cout<<"英語成績最高分是:"<<stu[j_eng].name<<" "\
<<"分數是:"<<stu[j_eng].english<<"分"<<endl;
cout<<"全班英語成績平均成績是:"<<ave_eng<<"分"<<endl;
return 0;
}
解題思路1
冒泡法排序程式碼爲:
#include <iostream>
using namespace std;
struct Stu
{
int num;
string name;
float computer;
};
int main()
{
Stu student[6],temp;
int i,j;
for(i=0;i<6;i++)
cin>>student[i].num>>student[i].name>>student[i].computer;
for(j=1;j<6;j++)
for(i=0;i<6-j;i++)
if(student[i].computer<student[i+1].computer)
{
temp=student[i];
student[i]=student[i+1];
student[i+1]=temp;
}
cout<<"按計算機成績由高到低爲:"<<endl;
for(i=0;i<6;i++)
cout<<student[i].name<<" "<<student[i].computer<<endl;
return 0;
}
解題思路1
#include <iostream>
#include <string>
using namespace std;
struct student
{
int num;
string name;
float score[3];
};
void print(student *q);
int main( )
{
struct student stu[5],*pt=stu;
int i,j;
for(i=0;i<5;i++)
{
cin>>stu[i].num>>stu[i].name;
for(j=0;j<3;j++)
cin>>stu[i].score[j];
}
cout<<"5名學生成績如下:"<<endl;
print(pt);
return 0;
}
void print(student *q)
{
for(int i=0;i<5;i++,q++)
cout<<q->num<<" "<<q->name<<" "\
<<q->score[0]<<" "<<q->score[1]<<" "\
<<q->score[2]<<endl;
}
解題思路1
#include<iostream>
#include<string>
using namespace std;
struct Person
{
string name;
int count;
};
int main()
{
Person leader[3]={"li",0, "zhang",0, "sun",0};
int i,j;
string leader_name;
for(i=0;i<10;i++)
{
cin>>leader_name;
for(j=0;j<3;j++)
if(leader_name==leader[j].name)
leader[j].count++;
}
cout<<"三位候選人票數如下:"<<endl;
for(i=0;i<3;i++)
cout<<leader[i].name<<" 票數是: "<<leader[i].count<<endl;
return 0;
}