前言
部分題目無法通過全部測驗樣例,待優化,
第一題
問題描述
如果整數 a 是整數 b 的整數倍,則稱 b 是 a 的約數,
請問,有多少個正整數是 2020 的約數,
答案提交
這是一道結果填空的題,你只需要算出結果后提交即可,本題的結果為一個整數,在提交答案時只填寫這個整數,填寫多余的內容將無法得分,
答案:12
代碼:
#include <stdio.h>
int main(){
int i;
int num = 2020;
int cnt = 0;
for(i=1;i<=num;i++){
if(num%i == 0){
cnt++;
}
}
printf("%d",cnt);
return 0;
}
第二題
問題描述
如果一個 mp3 檔案占用磁盤的大小是 4MB,小藍的硬碟還剩下 100GB 的空間,請問他還可以放多少個這樣的 mp3 檔案?
答案提交
這是一道結果填空的題,你只需要算出結果后提交即可,本題的結果為一個整數,在提交答案時只填寫這個整數,填寫多余的內容將無法得分,
答案:25600
代碼:
#include <stdio.h>
int main(){
int yp = 100*1024;
int ans = yp/4;
printf("%d",ans);
return 0;
}
第三題
問題描述
一個包含 2020 個結點的無向圖,如果圖中沒有自環和重邊,最多包含多少條邊?
答案提交
這是一道結果填空的題,你只需要算出結果后提交即可,本題的結果為一個整數,在提交答案時只填寫這個整數,填寫多余的內容將無法得分,
答案:2039190
代碼:
#include <stdio.h>
int main(){
int jd;
int bian;
int anum;
bian = 0;
anum = 1;
for(jd = 2; jd<=2020; jd++){
bian += anum;
anum++;
printf("jd = %d , bian = %d\n",jd,bian);
}
return 0;
}
第四題
問題描述
整數 1 到 6 連在一起,成為 123456,長度為 6,
整數 1 到 12 連在一起,成為 123456789101112,長度為 15,
請問整數 1 到 2020 連在一起,長度為多少?
答案提交
這是一道結果填空的題,你只需要算出結果后提交即可,本題的結果為一個整數,在提交答案時只填寫這個整數,填寫多余的內容將無法得分,
答案:6973
代碼:
#include <stdio.h>
int main(){
int ord = 2020;
int i;
int num;
int cnt;
int all_cnt = 0;
for(i=1; i<=ord; i++){
//記錄該數字的位數
//默認位數為1
cnt = 1;
num = i;
//每次除以10≠0,則cnt++
while((num/10)!= 0){
cnt++;
num/=10;
}
//cnt為當前數的位數
all_cnt += cnt;
}
printf("%d",all_cnt);
return 0;
}
第五題
問題描述
在一個序列 a = (a[1], a[2], …, a[n]) 中,如果 (i, j) 滿足 i < j 且 a[i] > a[j],則稱為一個逆序對,
例如:(3, 2, 2, 1) 中包含 6 個逆序對,
請問,(87, 39, 35, 1, 99, 10, 54, 1, 46, 24, 74, 62, 49, 13, 2, 80, 24, 58, 8, 14, 83, 23, 97, 85, 3, 2, 86, 10, 71, 15) 中包含多少個逆序對?
答案提交
這是一道結果填空的題,你只需要算出結果后提交即可,本題的結果為一個整數,在提交答案時只填寫這個整數,填寫多余的內容將無法得分,
答案:221或217
代碼:
/*
思路:雙指標
*/
#include <stdio.h>
int main(){
int a[]={
87, 39, 35, 1, 99, 10, 54, 1, 46, 24, 74, 62, 49, 13, 2, 80, 24, 58, 8, 14, 83, 23, 97, 85, 3, 2, 86, 10, 71, 15,
};
int n = 30;
int i,j;
int cnt = 0;
for(i=0;i<n-1;i++){
for(j=i+1;j<n;j++){
if(a[i]>a[j]){
cnt++;
}
}
}
printf("%d",cnt);
return 0;
}
第6題
問題描述
給定一個三角形的底邊長度 l 和高度 h,求三角形的面積,
輸入格式
輸入的第一行包含一個整數 l,表示三角形的底邊長度,
第二行包含一個整數 h,表示三角形的高,
輸出格式
輸出一個數,表示三角形的面積,如果面積為整數,請直接輸出這個整數,不帶小數點,如果面積不是整數,請四舍五入保留正好一位小數,
樣例輸入
5
6
樣例輸出
15
樣例輸入
5
3
樣例輸出
7.5
資料規模和約定
對于所有評測用例,1 <= l, h <= 100,
代碼:
#include <stdio.h>
int main(){
int l,h,temp;
int ians;
double dans;
scanf("%d",&l);
scanf("%d",&h);
temp = l*h;
if(temp%2==0){
ians = temp/2;
printf("%d",ians);
}else{
dans = (double)temp/2.0;
printf("%.1lf",dans);
}
return 0;
}
第7題
問題描述
小藍正在上小學,老師要求同學們在暑假每天記日記,可是小藍整個暑假都在玩,直到最后一天才想起要記日記,于是小藍趕緊編了一些日記交給老師,
沒想到,日記很快就被老師發現了問題,原來小藍記完8月31日的日記,竟又記了8月32日和8月33日的日記,這顯然是有問題的,因為根本沒有8月32日和8月33日,
給定一個月份和一個日期,請問2021年有沒有這一天,
輸入格式
輸入的第一行包含一個整數 m,表示月份,
第二行包含一個整數 d,表示日期,
輸出格式
如果2021年有 m 月 d 日,輸入 yes,否則輸出 no,
樣例輸入
8
32
樣例輸出
no
樣例輸入
2
28
樣例輸出
yes
資料規模和約定
對于所有評測用例,1 <= m <= 20,1 <= d <= 40,
代碼:
#include <stdio.h>
//2021年不是閏年,2月有28天
const int table[13]={
0,31,28,31,30,31,30,31,31,30,31,30,31,
};
int main(){
int m,d;//月份和日期
int ans;//yes為1,no為0
scanf("%d",&m);
scanf("%d",&d);
if(d<1)ans = 0;
else if(d>table[m])ans = 0;
else ans = 1;
if(ans){
printf("yes");
}else{
printf("no");
}
return 0;
}
第8題
問題描述
給定一個單詞,請問在單詞中洗掉 t 個字母后,能得到的字典序最小的單詞是什么?
輸入格式
輸入的第一行包含一個單詞,由大寫英文字母組成,
第二行包含一個正整數 t,
輸出格式
輸出一個單詞,表示答案
樣例輸入
LANQIAO
3
樣例輸出
AIAO
資料規模和約定
對于所有評測用例,單詞長度不超過 100,t 小于單詞長度,
代碼:
/*
字典序最小單詞
遍歷所有的可能,找到字典序最小的,
*/
#include <stdio.h>
#include <string.h>
char a[101];
int book[101];
char jg[101];
char b[101];
void fuzhi(char aa[],char bb[]){
int i;
for(i=0;bb[i];i++){
aa[i] = bb[i];
}
aa[i] = 0;
}
int bijiao(char aa[],char bb[]){
int i;
for(i=0;aa[i]!=0 && bb[i]!=0;i++){
if(aa[i]!=bb[i])return aa[i]-bb[i];
}
}
void dfs(int len,int t,int step){
//已經填了t個了,使用strcmp比較
int i,j;
int temp;
if(step==t){
j=0;
for(i=0;i<len;i++){
if(a[i]!=-1){
b[j] = a[i];
j++;
}
}
b[j] = 0;
//如果這個b比jg小,那么它成為新的結果
if(bijiao(b,jg)<0){
fuzhi(jg,b);
}
return;
}
for(i=0;i<len;i++){
if(book[i] == 0){
temp = a[i];
a[i] = -1;
book[i] = 1;
dfs(len,t,step+1);
book[i] = 0;
a[i] = temp;
}
}
}
int main(){
char arr[101];
int t,i,len,maxi,j;
scanf("%s",arr);
scanf("%d",&t);
len = strlen(arr);
fuzhi(a,arr);
for(i=0;i<len;i++){
jg[i] = 127;
}
jg[i] = 0;
dfs(len,t,0);
printf("%s",jg);
return 0;
}
第9題
問題描述
給定一個序列 a_1, a_2, …, a_n,其中 a_1 < a_2 < … < a_n,
相鄰兩個數之間的差(后一個數減前一個數)稱為它們的間隙,
請問序列中最大的間隙值是多少?
輸入格式
輸入的第一行包含一個整數 n,表示序列的長度,
第二行包含 n 個正整數,為給定的序列,
輸出格式
輸出一個整數,表示序列中最大的間隙值,
樣例輸入
5
1 3 8 9 12
樣例輸出
5
樣例說明
a_3 - a_2 = 5,
資料規模和約定
對于所有評測用例,1 <= n <= 1000,1 <= a_i <= 100000,
代碼:
#include <stdio.h>
int main(){
int arr[1001];
int n,i;
int jx,max;
scanf("%d",&n);
for(i=0;i<n;i++)scanf("%d",&arr[i]);
//遍歷每個序列的間隙,得到最大值
max = 0;
for(i=1;i<n;i++){
jx = arr[i] - arr[i-1];
if(jx>max){
max = jx;
}
}
printf("%d",max);
return 0;
}
第10題
問題描述
小藍有黃綠藍三種顏色的小球,分別為 R, G, B 個,同樣顏色的小球沒有區別,
小藍將這些小球從左到右排成一排,排完后,將最左邊的連續同色小球個數記為 t_1,將接下來的連續小球個數記為 t_2,以此類推直到最右邊的小球,
請問,總共有多少總擺放小球的方案,使得 t_1, t_2, … 為嚴格單調遞增序列,即 t_1 < t_2 < t_3 < …
輸入格式
輸入一行包含三個整數 R, G, B,
輸出格式
輸出一個整數,表示答案,
樣例輸入
3 6 0
樣例輸出
3
樣例說明
用 r 表示紅球,g 表示綠球,可能的方案包括:
rrrgggggg
grrrggggg
ggrrrgggg
樣例輸入
2 4 6
樣例輸出
3
樣例說明
用 r 表示紅球,g 表示綠球,b 表示藍球,可能的方案包括:
rrggggbbbbbb
grrgggbbbbbb
brrggggbbbbb
資料規模和約定
對于30%的評測用例,1 <= R, G, B <= 10;
對于60%的評測用例,1 <= R, G, B <= 30;
對于所有評測用例,1 <= R, G, B <= 50,
除錯代碼:
/*
遍歷出全排列,找出嚴格增序的
給個資料序列,回傳序列的連續資料
*/
#include <stdio.h>
char a[151];
int lxa[100];
int ans;
int zhaolx(){
int i,j;
int cnt;
cnt = 1;
j = 0;
for(i=0;a[i];i++){
if(a[i]==a[i+1]){
cnt++;
}else{
lxa[j] = cnt;
j++;
cnt = 1;
}
}
return j;
}
int isZenxu(int len){
int i;
for(i=1;i<len;i++){
if(lxa[i]<=lxa[i-1]){
return 0;
}
}
return 1;
}
void dfs(int step,int rn,int gn,int bn){
int lx_len;
int j;
if(rn==0&&gn==0&&bn==0){
a[step]=0;
lx_len = zhaolx();
if(isZenxu(lx_len)){
ans++;
printf("%s\n",a);
for(j=0;j<lx_len;j++)printf("%d ",lxa[j]);
printf("\n");
}
return;
}
if(rn!=0){
a[step]='R';
dfs(step+1,rn-1,gn,bn);
}
if(gn!=0){
a[step]='G';
dfs(step+1,rn,gn-1,bn);
}
if(bn!=0){
a[step]='B';
dfs(step+1,rn,gn,bn-1);
}
}
int main(){
int rn,gn,bn;
int i;
scanf("%d%d%d",&rn,&gn,&bn);
ans = 0;
dfs(0,rn,gn,bn);
printf("%d",ans);
return 0;
}
提交代碼:
/*
遍歷出全排列,找出嚴格增序的
給個資料序列,回傳序列的連續資料
*/
#include <stdio.h>
char a[151];
int lxa[100];
int ans;
int zhaolx(){
int i,j;
int cnt;
cnt = 1;
j = 0;
for(i=0;a[i];i++){
if(a[i]==a[i+1]){
cnt++;
}else{
lxa[j] = cnt;
j++;
cnt = 1;
}
}
return j;
}
int isZenxu(int len){
int i;
for(i=1;i<len;i++){
if(lxa[i]<=lxa[i-1]){
return 0;
}
}
return 1;
}
void dfs(int step,int rn,int gn,int bn){
int lx_len;
int j;
if(rn==0&&gn==0&&bn==0){
a[step]=0;
lx_len = zhaolx();
if(isZenxu(lx_len)){
ans++;
}
return;
}
if(rn!=0){
a[step]='R';
dfs(step+1,rn-1,gn,bn);
}
if(gn!=0){
a[step]='G';
dfs(step+1,rn,gn-1,bn);
}
if(bn!=0){
a[step]='B';
dfs(step+1,rn,gn,bn-1);
}
}
int main(){
int rn,gn,bn;
int i;
scanf("%d%d%d",&rn,&gn,&bn);
ans = 0;
dfs(0,rn,gn,bn);
printf("%d",ans);
return 0;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/241010.html
標籤:其他
上一篇:湖南科技大學2020年大學生計算機程式設計競賽A:賣水果,B:隊伍能力值,C:小明的衣服,D:函式最小值,G:銀行記賬
