文章目录

  • 7-152 打印沙漏
  • 7-153 连续因子
  • 7-154 乘法口诀数列
  • 7-155 求n以内最大的k个素数以及它们的和
  • 7-156 数组循环左移
  • 7-157 Left-pad
  • 7-158 小于m的最大的10个素数
  • 7-159 猜数字
  • 7-160 素因子分解
  • 7-161 英文字母替换加密(大小写转换+后移1位)
  • 7-162 凯撒密码
  • 7-163 将数组中的数逆序存放
  • 7-164 在矩阵中找满足要求的数
  • 7-165 红包
  • 7-166 统计组成的四位数
  • 7-167 找出10个整数中的最大值、最小值、偶数的个数、偶数的平均值。
  • 7-168 求n项和值
  • 7-169 求完数
  • 7-170 输出数字三角阵
  • 7-171 高空坠球
  • 7-172 找出不是两个数组共有的元素
  • 7-173 简单计算器
  • 7-174 选择法排序
  • 7-175 找鞍点
  • 7-176 输出学生成绩
  • 7-177 求一元二次方程的根
  • 7-178 验证“哥德巴赫猜想”
  • 7-179 找完数
  • 7-180 梅森数
  • 7-181 打印杨辉三角
  • 7-182 删除重复字符
  • 7-183 统计字符出现次数
  • 7-184 装箱问题
  • 7-185 组个最小数
  • 7-186 找出总分最高的学生
  • 7-187 圆形体体积计算器
  • 7-188 龟兔赛跑
  • 7-189 冒泡法排序
  • 7-190 猴子选大王
  • 7-191 删除字符串中的子串
  • 7-192 字符串的冒泡排序
  • 7-193 字符串循环左移
  • 7-194 说反话-加强版
  • 7-195 整数分解为若干项之和
  • 7-196 数列求和-加强版
  • 7-197 输出全排列
  • 7-198 N个数求和
  • 7-199 A-B
  • 7-200 天梯赛的善良

7-151 找出三位水仙花数
分数 6
作者 颜晖
单位 浙大城市学院
本题要求编写程序,输出给定正整数M和N区间内的所有三位水仙花数。三位水仙花数,即其个位、十位、百位数字的立方和等于该数本身。

输入格式:
输入在一行中给出两个正整数M和N(100≤M≤N≤999)。

输出格式:
顺序输出M和N区间内所有三位水仙花数,每一行输出一个数。若该区间内没有三位水仙花数,则无输出。

如果M或者N不符合题目的要求,则输出Invalid Value.。

输入样例1:
100 400
输出样例1:
153
370
371
输入样例2:
500 600
输出样例2:

输入样例3:
990 101
输出样例3:
Invalid Value.

#include<stdio.h>
#include<math.h>
int main()
{int M,N,q,w;int g,s,b;scanf("%d%d",&M,&N);q=M;w=N;if(M<=N&&M>=100&&N>=100&&N<=999)//判断输入数字是否合法{for(q;q<=w;q++){g=q%10;s=q%100/10;b=q/100;//取得输入数字的个十百位if(q==pow(g,3)+pow(s,3)+pow(b,3))//判断是否为水仙花数{printf("%d\n",q);//如果是则输出}}}else//不合法的输入{ printf("Invalid Value.");}return 0;
}

7-152 打印沙漏

分数 5
作者 陈越
单位 浙江大学
本题要求你写个程序把给定的符号打印成沙漏的形状。例如给定17个“*”,要求按下列格式打印





所谓“沙漏形状”,是指每行输出奇数个符号;各行符号中心对齐;相邻两行符号数差2;符号数先从大到小顺序递减到1,再从小到大顺序递增;首尾符号数相等。

给定任意N个符号,不一定能正好组成一个沙漏。要求打印出的沙漏能用掉尽可能多的符号。

输入格式:
输入在一行给出1个正整数N(≤1000)和一个符号,中间以空格分隔。

输出格式:
首先打印出由给定符号组成的最大的沙漏形状,最后在一行中输出剩下没用掉的符号数。

输入样例:
19 *
输出样例:





2

#include<stdio.h>int main()
{int n;char c;while(~scanf("%d %c",&n,&c)){int sum=n-1;int floor=1;int a=3;while(sum){if(sum-a*2<0) break;sum-=a*2;a+=2;floor++;}for(int i=0,j=floor-1;i<floor;i++,j--){for(int k=0;k<i;k++){printf(" ");}int res=1+2*j;for(int k=0;k<res;k++){printf("%c",c);}printf("\n");}for(int i=1,j=floor-1-1;i<floor;i++,j--){for(int k=0;k<j;k++){printf(" ");}int res=1+2*i;for(int k=0;k<res;k++){printf("%c",c);}printf("\n");}printf("%d\n",sum);}return 0;
}

7-153 连续因子

分数 6
作者 陈越
单位 浙江大学
一个正整数 N 的因子中可能存在若干连续的数字。例如 630 可以分解为 3×5×6×7,其中 5、6、7 就是 3 个连续的数字。给定任一正整数 N,要求编写程序求出最长连续因子的个数,并输出最小的连续因子序列。

输入格式:
输入在一行中给出一个正整数 N(1<N<2
31
)。

输出格式:
首先在第 1 行输出最长连续因子的个数;然后在第 2 行中按 因子1因子2……*因子k 的格式输出最小的连续因子序列,其中因子按递增顺序输出,1 不算在内。

输入样例:
630
输出样例:
3
567

#include<stdio.h>
int main(){int j=2,a[31]={0},b[31]={0};int n,i=0,flag=1,k,l=0,minlen=1;scanf("%d",&n);for(j=2;flag;j++){k=n;l=j;i=0;while(k>=l){if(k%l==0){k=k/l;a[i]=l;i++;l++;}elsebreak;}if(n<=1LL*j*j)flag=0;else{if(i>minlen){minlen=i;for(i=0;i<minlen;i++)b[i]=a[i];}}}printf("%d\n",minlen);if(minlen==1&&a[0]==0)printf("%d",n);else if(minlen==1&&a[0]!=0)printf("%d",a[0]);else{for(i=0;i<minlen-1;i++)printf("%d*",b[i]);printf("%d",b[i]);}return 0;
}

7-154 乘法口诀数列

分数 6
作者 陈越
单位 浙江大学
本题要求你从任意给定的两个 1 位数字 a
1

和 a
2

开始,用乘法口诀生成一个数列 {a
n

},规则为从 a
1

开始顺次进行,每次将当前数字与后面一个数字相乘,将结果贴在数列末尾。如果结果不是 1 位数,则其每一位都应成为数列的一项。

输入格式:
输入在一行中给出 3 个整数,依次为 a
1

、a
2

和 n,满足 0≤a
1

,a
2

≤9,0<n≤10
3

输出格式:
在一行中输出数列的前 n 项。数字间以 1 个空格分隔,行首尾不得有多余空格。

输入样例:
2 3 10
输出样例:
2 3 6 1 8 6 8 4 8 4
样例解释:
数列前 2 项为 2 和 3。从 2 开始,因为 2×3=6,所以第 3 项是 6。因为 3×6=18,所以第 4、5 项分别是 1、8。依次类推…… 最后因为第 6 项有 6×8=48,对应第 10、11 项应该是 4、8。而因为只要求输出前 10 项,所以在输出 4 后结束。

#include <stdio.h>
int main()
{int a[2001],i,j=1,x,y,n,t;scanf("%d%d%d",&x,&y,&n);a[0]=x;a[1]=y;for(i=0;i<n-2;i++){t=a[i]*a[i+1];if(t<10)a[++j]=t;else{a[++j]=t/10;a[++j]=t%10;}}for(i=0;i<n;i++){printf("%d",a[i]);if(i<n-1)printf(" ");}return 0;
}

7-155 求n以内最大的k个素数以及它们的和

分数 6
作者 林颖贤
单位 集美大学
本题要求计算并输出不超过n的最大的k个素数以及它们的和。

输入格式:
输入在一行中给出n(10≤n≤10000)和k(1≤k≤10)的值。

输出格式:
在一行中按下列格式输出:

素数1+素数2+…+素数k=总和值
其中素数按递减顺序输出。若n以内不够k个素数,则按实际个数输出。

输入样例1:
1000 10
输出样例1:
997+991+983+977+971+967+953+947+941+937=9664
输入样例2:
12 6
输出样例2:
11+7+5+3+2=28

#include <stdio.h>
int main()
{int n,k,i,j,q=0,sum=0;scanf("%d%d",&n,&k);i=n;for(i;i>=2;i--){int isprime =1;for(j=2;j<i-1;j++){if(i%j==0){isprime=0;break;}}if(isprime==1){sum+=i;if(q==0)printf("%d",i);else printf("+%d",i);q++;}if(q>=k||i==2){printf("=%d",sum);break;}}
return 0;
}

7-156 数组循环左移

分数 5
作者 DS课程组
单位 浙江大学
本题要求实现一个对数组进行循环左移的简单函数:一个数组a中存有n(>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向左移m(≥0)个位置,即将a中的数据由(a
0

a
1

⋯a
n−1

)变换为(a
m

⋯a
n−1

a
0

a
1

⋯a
m−1

)(最前面的m个数循环移至最后面的m个位置)。如果还需要考虑程序移动数据的次数尽量少,要如何设计移动的方法?

输入格式:
输入第1行给出正整数n(≤100)和整数m(≥0);第2行给出n个整数,其间以空格分隔。

输出格式:
在一行中输出循环左移m位以后的整数序列,之间用空格分隔,序列结尾不能有多余空格。

输入样例:
8 3
1 2 3 4 5 6 7 8
输出样例:
4 5 6 7 8 1 2 3

#include<iostream>
using namespace std;
int main(void){int a[101];int n,m;while(scanf("%d%d",&n,&m)!=EOF){for(int i=0;i < n;i++)scanf("%d",&a[i]);for(int i =m;i<n+m;i++){if( i >=n)printf("%d",a[ i%n]);else printf("%d",a[i]);if( i == n+m -1)printf("\n");else printf(" ");    }}return 0;
}

7-157 Left-pad

分数 5
作者 陈越
单位 浙江大学
根据新浪微博上的消息,有一位开发者不满NPM(Node Package Manager)的做法,收回了自己的开源代码,其中包括一个叫left-pad的模块,就是这个模块把javascript里面的React/Babel干瘫痪了。这是个什么样的模块?就是在字符串前填充一些东西到一定的长度。例如用去填充字符串GPLT,使之长度为10,调用left-pad的结果就应该是*****GPLT。Node社区曾经对left-pad紧急发布了一个替代,被严重吐槽。下面就请你来实现一下这个模块。

输入格式:
输入在第一行给出一个正整数N(≤10
4
)和一个字符,分别是填充结果字符串的长度和用于填充的字符,中间以1个空格分开。第二行给出原始的非空字符串,以回车结束。

输出格式:
在一行中输出结果字符串。

输入样例1:
15 _
I love GPLT
输出样例1:
____I love GPLT
输入样例2:
4 *
this is a sample for cut
输出样例2:
cut

#include<bits/stdc++.h>using namespace std;
int main()
{int n;char a;string s;cin >> n >> a;getchar();getline(cin, s);if (n >= s.length()){for (int i = 0; i < n - s.length(); i++)cout << a;cout << s;}else{for (int i = s.length() - n; i < s.length(); i++)cout << s[i];}
}

7-158 小于m的最大的10个素数

分数 5
作者 王淑琴
单位 天津师范大学
给定一个整数m(50<m<20000),找出小于m的最大的10个素数。

输入格式:
输入在一行中给出一个正整数m(50<m<20000)。

输出格式:
在一行中按递减顺序输出10个满足条件的素数,每个素数输出占6列。没有其它任何附加格式和字符。

输入样例:
229
输出样例:
227 223 211 199 197 193 191 181 179 173

#include<stdio.h>
int main()
{int judge(int n);int m, i, count = 0;scanf("%d", &m);for ( i = m-1; i > 1; i--){if(judge(i)){printf("%6d", i);count++;}if (count == 10)break;}
}
int judge(int n)
{int i;for (i = 2; i < n; i++)if (n%i == 0)break;if (i < n) return 0;else return 1;
}

7-159 猜数字

分数 5
作者 陈越
单位 浙江大学
一群人坐在一起,每人猜一个 100 以内的数,谁的数字最接近大家平均数的一半就赢。本题就要求你找出其中的赢家。

输入格式:
输入在第一行给出一个正整数N(≤10
4
)。随后 N 行,每行给出一个玩家的名字(由不超过8个英文字母组成的字符串)和其猜的正整数(≤ 100)。

输出格式:
在一行中顺序输出:大家平均数的一半(只输出整数部分)、赢家的名字,其间以空格分隔。题目保证赢家是唯一的。

输入样例:
7
Bob 35
Amy 28
James 98
Alice 11
Jack 45
Smith 33
Chris 62
输出样例:
22 Amy

#include <stdio.h>
#include<math.h>
#include<stdlib.h>
int main()
{char name_deposit[10000][9];
//储存名字
int N, n, i, mD_value, sum = 0, num_deposit[10000];
//差值mD_value 存储num
double ave;//也可以为int型
scanf("%d", &N);
for (i = 0; i < N; i++)//将输入的name与num存储,首项开始1-1对应
{scanf("%s %d", name_deposit[i], &num_deposit[i]);
sum += num_deposit[i];
ave = sum / (2 * N);
}
mD_value = fabs(num_deposit[0] - ave);//将第一个num与ave的差值作为最小
for (i = 0; i < N; i++)
if (fabs(num_deposit[i] - ave) <= mD_value)//比较差值大小
{n = i;//对应的位置
mD_value = fabs(num_deposit[i] - ave);
}
printf("%.0lf %s\n", ave, name_deposit[n]);
return 0;}

7-160 素因子分解

分数 5
作者 何钦铭
单位 浙江大学
给定某个正整数 N,求其素因子分解结果,即给出其因式分解表达式 N=p
1

k
1

⋅p
2

k
2

⋯p
m

k
m

输入格式:
输入long int范围内的正整数 N。

输出格式:
按给定格式输出N的素因式分解表达式,即 N=p1k1*p2k2*…*pm^km,其中pi为素因子并要求由小到大输出,指数ki为pi的个数;当ki为1即因子pi只有一个时不输出ki。

输入样例:
1323
输出样例:
1323=33*72

#include<stdio.h>
int main(void)
{long int arr[8192] = { 0 }, a = 0, l = 0, flag = 1;scanf("%ld", &a);long int b = a;printf("%ld=", a);if (a == 0 || a == 1) { printf("%d", a); return 0; }for (long int i = 2; i < 8192; i++) {if (a % i == 0) {while (a % i == 0) {a /= i;arr[i]++;}}}for (long int i = 2; i < 8192; i++) {if (arr[i]) {if (flag && arr[i] != 1) {printf("%ld^%ld", i, arr[i]);flag = 0;}else if (flag && arr[i] == 1) {flag = 0;printf("%ld", i);}else if (!flag && arr[i] != 1)printf("*%ld^%ld", i, arr[i]);else if (!flag && arr[i] == 1)printf("*%ld", i);}}return 0;
}

7-161 英文字母替换加密(大小写转换+后移1位)

分数 6
作者 颜晖
单位 浙大城市学院
本题要求编写程序,将英文字母替换加密。为了防止信息被别人轻易窃取,需要把电码明文通过加密方式变换成为密文。变换规则是:将明文中的所有英文字母替换为字母表中的后一个字母,同时将小写字母转换为大写字母,大写字母转换为小写字母。例如,字母a->B、b->C、…、z->A、A->b、B->c、…、Z->a。输入一行字符,将其中的英文字母按照以上规则转换后输出,其他字符按原样输出。

输入格式:
输入一行字符,以回车符 '\n’作为 结束符。

输出格式:
将输入的一行字符中的所有英文字母替换为字母表中的后一个字母,同时将小写字母转换为大写字母,大写字母转换为小写字母后输出,其他字符按原样输出。

输入样例:
在这里给出一组输入。例如:

Reold Z123?
输出样例:
在这里给出相应的输出。例如:

sFPME a123?

#include<stdio.h>
int main(){char c,delta;delta='A'-'a';do{scanf("%c",&c);if(c>='a'&&c<'z')c+=(delta+1);else if(c>='A'&&c<'Z')c-=(delta-1);else if(c=='Z')c='a';else if(c=='z')c='A';printf("%c",c);}while(c!='\n');return 0;
}

7-162 凯撒密码

分数 7
作者 颜晖
单位 浙大城市学院
为了防止信息被别人轻易窃取,需要把电码明文通过加密方式变换成为密文。输入一个以回车符为结束标志的字符串(少于80个字符),再输入一个整数offset,用凯撒密码将其加密后输出。恺撒密码是一种简单的替换加密技术,将明文中的所有字母都在字母表上偏移offset位后被替换成密文,当offset大于零时,表示向后偏移;当offset小于零时,表示向前偏移。

输入格式:
输入第一行给出一个以回车结束的非空字符串(少于80个字符);第二行输入一个整数offset。

输出格式:
输出加密后的结果字符串。

输入样例1:
Hello Hangzhou
2
输出样例1:
Jgnnq Jcpibjqw
输入样例2:
a=x+y
-1
输出样例2:
z=w+x

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int main()
{string s;getline(cin,s);ll n;cin>>n;n%=26;for(int i=0;i<s.size();i++){if(s[i]<'A'||(s[i]>'Z'&&s[i]<'a') || s[i]>'z'){cout<<s[i];}else{char l;if(s[i]<='z'&&s[i]>='a'){l=(s[i]-'a'+n+26)%26+'a';}else{l=(s[i]-'A'+n+26)%26+'A';}cout<<(char)l;}    }return 0;
}

7-163 将数组中的数逆序存放

分数 5
作者 王
单位 兰州交通大学
本题要求编写程序,将给定的8个整数存入数组中,将数组中的这8个数逆序存放,再按顺序输出数组中的元素

输入格式:
在一行中输入8个绝对值不超过100的整数,用空格分开

输出格式:
在一行中输出这8个整数的处理结果,每个数字字段宽度4,数字后插入一个空格。

输入样例:
在这里给出一组输入。例如:

18 -29 6 72 49 0 65 77
输出样例:
在这里给出相应的输出。例如:

77 65 0 49 72 6 -29 18

#include<stdio.h>
int main(){int a[11], i, n;//scanf("%d", &n);for(i = 1; i <= 8; i++){   //将输入数依次赋值给数组a的n个元素;scanf("%d", &a[i]);}for(i = 8; i >= 1; i--){printf("% 4d", a[i]);if(i == 1) continue;printf(" ");}return 0;
}

7-164 在矩阵中找满足要求的数

分数 5
作者 王
单位 浙江大学
在一个矩阵A中,求绝对值最大元素所在的行、列位置。

1.jpg

输入格式:
本题无输入,通过初始化给数组赋值。

输出格式:
在一行中输出,绝对值最大元素在 x行 x列。整数输出字段宽度2

输入样例:

输出样例:
绝对值最大元素在 1行 3列

php

7-165 红包

分数 5
作者 DS课程组
单位 临沂大学
派"红包"是新年的一种习俗,寓意祝愿和好运。X公司今年盈利颇丰,临近年关去银行取了充足百元现金,为全体员工准备过年红包。年末银行会准备很多连号的人民币供市民使用,X公司也取到了很多连号人民币,并且决定红包里先包这些连号人民币。由于X公司取到的现金较多,需要你编个程序帮助它统计连号人民币张数超过10(包括10)的个数,并输出最长连号人民币。

输入格式:
输入为两行,第一行为一个正整数 n (1≤n≤10
5
),代表百元人民币的张数。
随后一行为n个正整数,分别代表每一张人民币的编号(不超过8位的非负整数),中间用空格隔开。

输出格式:
输出为两行,第一行为一个整数,表示输入序列中连号人民币的张数超过10的序列个数。

第二行按照输入顺序输出最长连号人民币的编号,中间用1个空格分隔,首尾不能有多余空格。最长连号人民币如果有多个,输出最先出现的那个。

输入样例:
10
1 2 3 4 5 6 7 8 9 10

输出样例:
1
1 2 3 4 5 6 7 8 9 10

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
const int N = 100000+10;
int a[N];
struct NUM
{int l;int r;int lenth;
};
int cmp(NUM A,NUM B)
{if(A.lenth!=B.lenth)return A.lenth>B.lenth;return A.l<B.l;
}
vector<NUM> A;
int main()
{int n;cin>>n;for(int i = 1;i <= n;i ++ )cin>>a[i];int l=0,r=0,lenth=1,ans=0;for(int i = 1;i <= n;i ++ ){if(a[i+1]-a[i]==1){r++;lenth++;}else{if(lenth>=10){ans++;}A.push_back({l,r,lenth});l=r+1;r=r+1;lenth=1;}} cout<<ans<<endl;sort(A.begin(),A.end(),cmp);for(int i = A[0].l+1;i <= A[0].r+1;i ++ ){if(i==A[0].l+1)cout<<a[i];else cout<<' '<<a[i];}
}

7-166 统计组成的四位数

分数 5
作者 王红鹰
单位 兰州交通大学
打印输出1、2、3、4能组成的所有可能的四位数,并统计个数。

输入格式:
无输入

输出格式:
表控格式输出,每行输出一个组成的四位数,最后一行输出能组成的四位数的个数,按样式:可能的四位数有 XX个输出。

输入样例:
无输入

输出样例:
在这里给出相应的输出。例如:

php

7-167 找出10个整数中的最大值、最小值、偶数的个数、偶数的平均值。

分数 6
作者 吴光生
单位 新余学院
找出10个整数中的最大值、最小值、偶数的个数、偶数的平均值。(使用Scanner类从键盘输入数据。)

请注意:含有main方法的类(class)的名字必须命名为Main,否则调试不成功。

输入格式:
在一行中输入10个整数,中间用空格隔开。

输出格式:
分四行分别输出最大值、最小值、偶数的个数、偶数的平均值。

输入样例:
在这里给出一组输入。例如:

18 -6 12 27 9 31 -20 42 33 75
输出样例:
在这里给出相应的输出。例如:

最大值是75
最小值是-20
偶数的个数是5
偶数的平均值是9.2

import java.util.Scanner;
import java.util.List;
import java.util.ArrayList;public class Main{public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int count = 10;int max = 0;int min = 999;int t;List<Integer> dList = new ArrayList<Integer>(10);for (int i = 0; i < count; i++) {t = scanner.nextInt();if (t % 2 == 0) {dList.add(t);}if (t > max) {max = t;}if (t < min) { min = t;}}double sum = 0;// float sum = dList.stream().reduce(0, Integer::sum) / dList.size();if(dList.size() > 0){for(int i : dList){sum += i;}sum = sum / dList.size();}else sum = 0.0;System.out.println("最大值是" + max);System.out.println("最小值是" + min);System.out.println("偶数的个数是" + dList.size());System.out.println("偶数的平均值是" + sum);}
}

7-168 求n项和值

分数 5
作者 王红鹰
单位 兰州交通大学
编写计算下式的和值,N值由键盘输入。
1+(1+3)+(1+3+5)+(1+3+5+7)+…+(1+3+5+7+…+N)

输入格式:
输入一个奇数

输出格式:
表控格式输出和值

输入样例:
在这里给出一组输入。例如:

27
输出样例:
在这里给出相应的输出。例如:

    1015
#include<bits/stdc++.h>
#include<string.h>
#include<cmath>
#include<algorithm>
using namespace std;
int main(){int n;cin>>n;int sum=0;int num=0;for(int i=1;i<=n;i+=2){num+=i;sum+=num;}for(int i=0;i<8;i++)cout<<" ";cout<<sum;return 0;
}

7-169 求完数

分数 6
作者 王红鹰
单位 兰州交通大学
编写程序求2至10000之间的所有“完数”。所谓“完数”是指除自身之外的所有因子之和等于自身的数。如28是一个完数,因为28的因子有:1、2、4、7、14,,且:8=1+2+4+7+14

输入格式:
无输入

输出格式:
表控格式输出,一行输出一个完数

输入样例:
无输入

输出样例:
6
28
496
8128
代码长度限制

php

7-170 输出数字三角阵

分数 6
作者 王红鹰
单位 兰州交通大学
编程输出如下数字三角阵。

10.jpg

输入格式:
无输入

输出格式:
有格式输出,整数的字段宽度为3,每个数后面输出2个空格

输入样例:
无输入

输出样例:
1
7 8
13 14 15
19 20 21 22
25 26 27 28 29
31 32 33 34 35 36
25 26 27 28 29
19 20 21 22
13 14 15
7 8
1
代码长度限制

php

7-171 高空坠球

分数 6
作者 C课程组
单位 浙江大学
皮球从某给定高度自由落下,触地后反弹到原高度的一半,再落下,再反弹,……,如此反复。问皮球在第n次落地时,在空中一共经过多少距离?第n次反弹的高度是多少?

输入格式:
输入在一行中给出两个非负整数,分别是皮球的初始高度和n,均在长整型范围内。

输出格式:
在一行中顺序输出皮球第n次落地时在空中经过的距离、以及第n次反弹的高度,其间以一个空格分隔,保留一位小数。题目保证计算结果不超过双精度范围。

输入样例:
33 5
输出样例:
94.9 1.0
代码长度限制

#include<stdio.h>
int main(){int i,n;double H,h,s;//H初始高度,h反弹高度scanf("%lf %d",&H,&n);if(n==0)printf("0.0 0.0");//没下落else {s=H;//第一次落地经过的距离h=H/2;//第一次反弹高度for(i=2;i<=n;i++){//从第二次开始累加s+=2*h;h/=2;}printf("%.1lf %.1lf",s,h);}return 0;
}

7-172 找出不是两个数组共有的元素

分数 5
作者 张彤彧
单位 浙江大学
给定两个整型数组,本题要求找出不是两者共有的元素。

输入格式:
输入分别在两行中给出两个整型数组,每行先给出正整数N(≤20),随后是N个整数,其间以空格分隔。

输出格式:
在一行中按照数字给出的顺序输出不是两数组共有的元素,数字间以空格分隔,但行末不得有多余的空格。题目保证至少存在一个这样的数字。同一数字不重复输出。

输入样例:
10 3 -5 2 8 0 3 5 -15 9 100
11 6 4 8 2 6 -5 9 0 100 8 1
输出样例:
3 5 -15 6 4 1

#include <stdio.h>
int main() {int n, m, i, j, flag, first = 0,cnt=0;scanf("%d", &n);int a[n];for (i = 0; i < n; i++)scanf("%d", &a[i]);scanf("%d", &m);int b[m];int s[m+n];for (j = 0; j < m; j++)scanf("%d", &b[j]);for (i = 0; i < n; i++) {flag = 0;for (j = 0; j < m; j++) {if (a[i] == b[j]) {flag = 1;break;}}if (flag == 0) {if (first == 0) {s[cnt]=a[i];cnt++;first = 1;} else{s[cnt]=a[i];cnt++;}}}for (j = 0; j < m; j++) {flag = 0;for (i = 0; i < n; i++) {if (a[i] == b[j]) {flag = 1;break;}}if (flag == 0) {if (first == 0) {s[cnt]=b[j];cnt++;first = 1;} else{s[cnt]=b[j];cnt++;}}}printf("%d",s[0]);for(i=1;i<cnt;i++){flag=0;for(j=0;j<i;j++){if(s[i]==s[j]){flag=1;break;}}if(flag==0)printf(" %d",s[i]);}return 0;
}

7-173 简单计算器

分数 5
作者 张彤彧
单位 浙江大学
模拟简单运算器的工作。假设计算器只能进行加减乘除运算,运算数和结果都是整数,四种运算符的优先级相同,按从左到右的顺序计算。

输入格式:
输入在一行中给出一个四则运算算式,没有空格,且至少有一个操作数。遇等号”=”说明输入结束。

输出格式:
在一行中输出算式的运算结果,或者如果除法分母为0或有非法运算符,则输出错误信息“ERROR”。

输入样例:
1+2*10-10/2=
输出样例:
10

#include<stdio.h>
int main(){int a,sum;char c;scanf("%d",&sum);scanf("%c",&c);while(c!='='){scanf("%d",&a);switch(c){case '+':sum+=a;break;case '-':sum-=a;break;case '*':sum*=a;break;case '/':if(a==0){printf("ERROR");return 0;}else sum/=a;break;default:printf("ERROR");return 0;}scanf("%c",&c);}printf("%d",sum);return 0;
}

7-174 选择法排序

分数 5
作者 C课程组
单位 浙江大学
本题要求将给定的n个整数从大到小排序后输出。

输入格式:
输入第一行给出一个不超过10的正整数n。第二行给出n个整数,其间以空格分隔。

输出格式:
在一行中输出从大到小有序的数列,相邻数字间有一个空格,行末不得有多余空格。

输入样例:
4
5 1 7 6
输出样例:
7 6 5 1

#include<stdio.h>
int main(){int i,j,n,temp=0,max;//temp、max记录数组序号scanf("%d",&n);int a[n];for(i=0;i<n;i++)scanf("%d",&a[i]);for(i=0;i<n;i++){max=i;temp = a[i];for(j=i;j<n;j++)if(a[j]>a[max])max = j;a[i] = a[max];a[max] = temp;}printf("%d",a[0]);for(int i=1;i<n;i++)printf(" %d",a[i]);
}

7-175 找鞍点

分数 6
作者 C课程组
单位 浙江大学
一个矩阵元素的“鞍点”是指该位置上的元素值在该行上最大、在该列上最小。

本题要求编写程序,求一个给定的n阶方阵的鞍点。

输入格式:
输入第一行给出一个正整数n(1≤n≤6)。随后n行,每行给出n个整数,其间以空格分隔。

输出格式:
输出在一行中按照“行下标 列下标”(下标从0开始)的格式输出鞍点的位置。如果鞍点不存在,则输出“NONE”。题目保证给出的矩阵至多存在一个鞍点。

输入样例1:
4
1 7 4 1
4 8 3 6
1 6 1 2
0 7 8 9
输出样例1:
2 1
输入样例2:
2
1 7
4 1
输出样例2:
NONE

#include<stdio.h>
int main(){int n,i,j,k,t=0;int max,min,flag;scanf("%d",&n);int a[n][n];for(i=0;i<n;i++)for(j=0;j<n;j++)scanf("%d",&a[i][j]);for(i=0;i<n;i++){max=0;for(j=0;j<n;j++)if(a[i][j]>=a[i][max])max=j;flag=1;for(k=0;k<n;k++)if(a[i][max]>a[k][max])flag=0;if(flag==1){printf("%d %d\n",i,max);break;}}if(flag==0)printf("NONE");return 0;
}

7-176 输出学生成绩

分数 5
作者 张泳
单位 浙大城市学院
本题要求编写程序,根据输入学生的成绩,统计并输出学生的平均成绩、最高成绩和最低成绩。建议使用动态内存分配来实现。

输入格式:
输入第一行首先给出一个正整数N,表示学生的个数。接下来一行给出N个学生的成绩,数字间以空格分隔。

输出格式:
按照以下格式输出:

average = 平均成绩
max = 最高成绩
min = 最低成绩
结果均保留两位小数。

输入样例:
3
85 90 95
输出样例:
average = 90.00
max = 95.00
min = 85.00

#include<stdio.h>
int main(){int n,i;scanf("%d",&n);double a[n],sum,average,min,max;scanf("%lf",&a[0]);min=a[0];max=a[0];sum=a[0];for(i=1;i<n;i++){scanf("%lf",&a[i]);if(a[i]>max)max=a[i];if(a[i]<min)min=a[i];sum+=a[i];}average=sum/n;printf("average = %.2lf\n",average);printf("max = %.2lf\n",max);printf("min = %.2lf",min);return 0;
}

7-177 求一元二次方程的根

分数 5
作者 陈建海
单位 浙江大学
本题目要求一元二次方程ax
2
+bx+c=0的根,结果保留2位小数。

输入格式:
输入在一行中给出3个浮点系数a、b、c,中间用空格分开。

输出格式:
根据系数情况,输出不同结果:

1)如果方程有两个不相等的实数根,则每行输出一个根,先大后小;

2)如果方程有两个不相等复数根,则每行按照格式“实部+虚部i”输出一个根,先输出虚部为正的,后输出虚部为负的;

3)如果方程只有一个根,则直接输出此根;

4)如果系数都为0,则输出"Zero Equation";

5)如果a和b为0,c不为0,则输出"Not An Equation"。

输入样例1:
2.1 8.9 3.5
输出样例1:
-0.44
-3.80
输入样例2:
1 2 3
输出样例2:
-1.00+1.41i
-1.00-1.41i
输入样例3:
0 2 4
输出样例3:
-2.00
输入样例4:
0 0 0
输出样例4:
Zero Equation
输入样例5:
0 0 1
输出样例5:
Not An Equation

#include <stdio.h>
#include <math.h>
int main()
{float a,b,c;while(scanf("%f%f%f",&a,&b,&c)!=EOF){if(a==0 && b==0 && c==0)printf("Zero Equation\n");else{            float x,x1,x2,m;if(a==0 && b==0 && c!=0)printf("Not An Equation\n");if(a==0 && b!=0 && c!=0)printf("%.2f\n",-c/b);if(a!=0 && b!=0){if(b*b-4*a*c==0){       m=-b/(2*a);printf("%.2f\n",m);}if(b*b-4*a*c>0){x=sqrt(b*b-4*a*c);x1=(-b+x)/(2*a);x2=(-b-x)/(2*a);printf("%.2f\n",x1);printf("%.2f\n",x2);}if(b*b-4*a*c<0){         x=sqrt(4*a*c-b*b);x1=-b/(2*a);x2=x/(2*a);printf("%.2f+%.2fi\n",x1,x2);printf("%.2f-%.2fi\n",x1,x2);}}if(a!=0 && b==0 && c!=0){printf("0.00+%.2fi\n",sqrt(c/a));printf("0.00-%.2fi\n",sqrt(c/a));}if(a!=0 && b==0 && c==0 )printf("0.00\n");}}return 0;
}

7-178 验证“哥德巴赫猜想”

分数 5
作者 徐镜春
单位 浙江大学
数学领域著名的“哥德巴赫猜想”的大致意思是:任何一个大于2的偶数总能表示为两个素数之和。比如:24=5+19,其中5和19都是素数。本实验的任务是设计一个程序,验证20亿以内的偶数都可以分解成两个素数之和。

输入格式:
输入在一行中给出一个(2, 2 000 000 000]范围内的偶数N。

输出格式:
在一行中按照格式“N = p + q”输出N的素数分解,其中p ≤ q均为素数。又因为这样的分解不唯一(例如24还可以分解为7+17),要求必须输出所有解中p最小的解。

输入样例:
24
输出样例:
24 = 5 + 19

#include <stdio.h>int is_prime(int n)
{if (n < 2) {return 0;}if (n == 2 ) {return 1;}if (n % 2 == 0) {return 0;}for (int i = 3; i * i <= n; i += 2) {if (n % i == 0) {return 0;}}return 1;}int main()
{int n;scanf("%d", &n);for (int i = 2; i < n ; i ++) {if (is_prime(i)  && is_prime(n - i)) {printf("%d = %d + %d", n, i, n - i);break;}
}
}

7-179 找完数

分数 5
作者 陈建海
单位 浙江大学
所谓完数就是该数恰好等于除自身外的因子之和。例如:6=1+2+3,其中1、2、3为6的因子。本题要求编写程序,找出任意两正整数m和n之间的所有完数。

输入格式:
输入在一行中给出2个正整数m和n(1<m≤n≤10000),中间以空格分隔。

输出格式:
逐行输出给定范围内每个完数的因子累加形式的分解式,每个完数占一行,格式为“完数 = 因子1 + 因子2 + … + 因子k”,其中完数和因子均按递增顺序给出。若区间内没有完数,则输出“None”。

输入样例:
2 30
输出样例:
6 = 1 + 2 + 3
28 = 1 + 2 + 4 + 7 + 14

#include <stdio.h>
int main()
{int i,m,n;scanf("%d %d",&m,&n);int count=0;for(i=m;i<=n;i++){int sum=0,a,b;for(a=1;a<i;a++){b=i%a;if(b==0)sum=sum+a;}if(sum==i){printf("%d = 1",sum);int c,d;for(c=2;c<i;c++){d=i%c;if(d==0)printf(" + %d",c);}printf("\n");count=count+1;}}if(count==0)printf("None");
}

7-180 梅森数

分数 5
作者 颜晖
单位 浙大城市学院
形如2
n
−1的素数称为梅森数(Mersenne Number)。例如2
2
−1=3、2
3
−1=7都是梅森数。1722年,双目失明的瑞士数学大师欧拉证明了2
31
−1=2147483647是一个素数,堪称当时世界上“已知最大素数”的一个记录。

本题要求编写程序,对任一正整数n(n<20),输出所有不超过2
n
−1的梅森数。

输入格式:
输入在一行中给出正整数n(n<20)。

输出格式:
按从小到大的顺序输出所有不超过2
n
−1的梅森数,每行一个。如果完全没有,则输出“None”。

输入样例:
6
输出样例:
3
7
31
代码长度限制

#include<stdio.h>
#include<math.h>
int main()
{int n,i,j,k;int flag=1;                     //判断是否是素数scanf("%d",&n);if(n<2)printf("None");             //小于2的不存在梅森数for(i=2;i<=n;i++){flag=1;k=pow(2,i)-1;for(j=2;j<k;j++){if(k%j==0)              //不是素数{flag=0;break;}}if(flag)printf("%d\n",k);         //梅森数}
}

7-181 打印杨辉三角

分数 5
作者 徐镜春
单位 浙江大学
本题要求按照规定格式打印前N行杨辉三角。

输入格式:
输入在一行中给出N(1≤N≤10)。

输出格式:
以正三角形的格式输出前N行杨辉三角。每个数字占固定4位。

输入样例:
6
输出样例:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1

#include<stdio.h>int main()
{int arr[11][11];int n=0;arr[0][0]=0;//输出nscanf("%d",&n);//打印,先控制行数外层循环for(int i=0;i<n;i++){//打印空格for(int k=0;k<n-i-1;k++){printf(" ");}//打印数据for(int j=0;j<=i;j++){//这个画图找规律,放在二维数组里,第一行就是0行,然后每行的最后一个1,i与j相同换行,第一个元素也是1,j=0然后根据杨辉三角的规律写中间元素if(i==j){arr[i][j]=1;}else if(j==0){arr[i][j]=1;}else{arr[i][j]=arr[i-1][j-1]+arr[i-1][j];}printf("%4d",arr[i][j]);if(i==j){printf("\n");}}}return 0;
}

7-182 删除重复字符

分数 5
作者 颜晖
单位 浙大城市学院
本题要求编写程序,将给定字符串去掉重复的字符后,按照字符ASCII码顺序从小到大排序后输出。

输入格式:
输入是一个以回车结束的非空字符串(少于80个字符)。

输出格式:
输出去重排序后的结果字符串。

输入样例:
ad2f3adjfeainzzzv
输出样例:
23adefijnvz

#include<stdio.h>
#include<string.h>
#define N 85
//思路:首先用字符数组str1存储输入的字符串,而后删除str1中重复的字符保存到str2中,
//       最后根据ASCII的顺序使用冒泡排序算法进行排序,注意:本题默认只有数字和小写字母
//       两种字符,且根据ASCII码表可知,数字的ASCII值小于小写字母的ASCII值。
//        本题重点是:删除多余的字符,要不断的更新和存储不重复的字符。
int main(void)
{int i, j, flag, len1 = 0, cnt = 0;char ch, temp;char str1[N];  //存储输入的字符串char str2[N];  //存储处理后的字符串ch = getchar();  //输入字符串for (i = 0; ch != '\n'; i++){str1[i] = ch;len1++;ch = getchar();}for (i = 0; i < len1; i++) //双重循环,删除str1[]中重复的字符{flag = 0;    //每次开始循环都更新flagfor (j = 0; j < i; j++){if (str1[i] == str1[j])  //在str1中查找重复的字符{flag = 1;}}if (flag == 0){str2[cnt] = str1[i];  //用str2保存从str1中找到的字符cnt++;  //记录不重复字符的个数}}for (i = 0; i < cnt - 1; i++) //对str2[]排序: 冒泡排序 进行cnt-1次{for (j = 0; j < cnt - i - 1; j++){if (str2[j] > str2[j + 1]){temp = str2[j];str2[j] = str2[j + 1];str2[j + 1] = temp;}}}for (i = 0; i < cnt; i++){printf("%c", str2[i]);}printf("\n");return 0;
}

7-183 统计字符出现次数

分数 5
作者 C课程组
单位 浙江大学
本题要求编写程序,统计并输出某给定字符在给定字符串中出现的次数。

输入格式:
输入第一行给出一个以回车结束的字符串(少于80个字符);第二行输入一个字符。

输出格式:
在一行中输出给定字符在给定字符串中出现的次数。

输入样例:
programming is More fun!
m
输出样例:
2

#!/usr/bin/python
# -*- coding: utf-8 -*-
#python
n = input()
s = str(input())key = 0
for i in range(0,len(n)):if s == n[i]:key +=1
print(key)

7-184 装箱问题

分数 5
作者 DS课程组
单位 浙江大学
假设有N项物品,大小分别为s
1

、s
2

、…、s
i

、…、s
N

,其中s
i

为满足1≤s
i

≤100的整数。要把这些物品装入到容量为100的一批箱子(序号1-N)中。装箱方法是:对每项物品, 顺序扫描箱子,把该物品放入足以能够容下它的第一个箱子中。请写一个程序模拟这种装箱过程,并输出每个物品所在的箱子序号,以及放置全部物品所需的箱子数目。

输入格式:
输入第一行给出物品个数N(≤1000);第二行给出N个正整数s
i

(1≤s
i

≤100,表示第i项物品的大小)。

输出格式:
按照输入顺序输出每个物品的大小及其所在的箱子序号,每个物品占1行,最后一行输出所需的箱子数目。

输入样例:
8
60 70 80 90 30 40 10 20
输出样例:
60 1
70 2
80 3
90 4
30 1
40 5
10 1
20 2
5

#include<stdio.h>#include <stdlib.h>int main()
{int m,n,i;scanf("%d",&m);int a[m];int c[10007]={0};//箱内物品总大小int b[m];//记录箱子号for(i=0;i<m;i++){scanf("%d",&a[i]);}int   k=0;for(i=0;i<m;i++){int p=0;//设置装箱开关for(n=0;n<=k;n++){if((c[n]+a[i])<=100){c[n]+=a[i];b[i]=n+1;p=1;break;}}if(p==0)//未装进则再开一个箱子{   k++;c[k]+=a[i];b[i]=k+1;}}for(i=0;i<m;i++){printf("%d %d\n",a[i],b[i]);}printf("%d",k+1);return 0;
}

7-185 组个最小数

分数 5
作者 曹鹏
单位 Google
给定数字0-9各若干个。你可以以任意顺序排列这些数字,但必须全部使用。目标是使得最后得到的数尽可能小(注意0不能做首位)。例如:给定两个0,两个1,三个5,一个8,我们得到的最小的数就是10015558。

现给定数字,请编写程序输出能够组成的最小的数。

输入格式:
输入在一行中给出10个非负整数,顺序表示我们拥有数字0、数字1、……数字9的个数。整数间用一个空格分隔。10个数字的总个数不超过50,且至少拥有1个非0的数字。

输出格式:
在一行中输出能够组成的最小的数。

输入样例:
2 2 0 0 0 3 0 0 1 0
输出样例:
10015558

#include <stdio.h>
int main()
{int min; //记录最小数int mark; //一个标记int a[10]; //用这个数组的下标代表0~9数字,输入的数代表每个数字的个数int b[100];//用来存放所有数字int j=0;for(int i=0;i<10;i++)scanf("%d",&a[i]);   //输入每个数字个数for(int i=0;i<10;i++) //将所有数字存入数组b{for(int k=1;k<=a[i];k++) //每个数字有几个就存几个{b[j]=i;j++;}}for(int i=1;i<10;i++) //这一层循环决定输出最小数的第一位,0不能做第一位,找出比0大的最小的数输出一个,注意只输出一个,并让这个数的a[i](数量)减1。{if(a[i]!=0){mark=i;  //标记比零大的最小数printf("%d",i);a[i]--;break;}}for(int k=1;k<=a[0];k++)    //从0开始把剩下的数全输出printf("0");for(int i=mark;i<10;i++)  //从剩下的比0大的最小数继续输出for(int k=1;k<=a[i];k++)printf("%d",i);return 0;
} 

7-186 找出总分最高的学生

分数 5
作者 C课程组
单位 浙江大学
给定N个学生的基本信息,包括学号(由5个数字组成的字符串)、姓名(长度小于10的不包含空白字符的非空字符串)和3门课程的成绩([0,100]区间内的整数),要求输出总分最高学生的姓名、学号和总分。

输入格式:
输入在一行中给出正整数N(≤10)。随后N行,每行给出一位学生的信息,格式为“学号 姓名 成绩1 成绩2 成绩3”,中间以空格分隔。

输出格式:
在一行中输出总分最高学生的姓名、学号和总分,间隔一个空格。题目保证这样的学生是唯一的。

输入样例:
5
00001 huanglan 78 83 75
00002 wanghai 76 80 77
00003 shenqiang 87 83 76
10001 zhangfeng 92 88 78
21987 zhangmeng 80 82 75
输出样例:
zhangfeng 10001 258

#include <stdio.h>struct student
{int id[5];char name[10];int a, b, c;int sum;
}stu[10];
int main()
{int i, j, N, max;scanf("%d", &N);for (i = 0; i < N; i++){scanf("%s %s %d %d %d", &stu[i].id, stu[i].name, &stu[i].a, &stu[i].b, &stu[i].c);stu[i].sum = stu[i].a + stu[i].b +stu[i].c;}for (j = i = 0; i < N; i++){if (stu[j].sum < stu[i].sum){j = i;}}printf("%s %s %d", stu[j].name, stu[j].id, stu[j].sum);
}

7-187 圆形体体积计算器

分数 5
作者 张高燕
单位 浙江大学
本题要求实现一个常用圆形体体积的计算器。计算公式如下:

球体体积 V=
3
4

πr
3
,其中r是球体半径。
圆柱体体积 V=πr
2
h,其中r是底圆半径,h是高。
圆锥体体积 V=
3
1

πr
2
h,其中r是底圆半径,h是高。
输入格式:
在每次计算之前,要求输出如下界面:

1-Ball
2-Cylinder
3-Cone
other-Exit
Please enter your command:
然后从标准输入读进一个整数指令。

输出格式:
如果读入的指令是1或2或3,则执行相应的体积计算;如果是其他整数,则程序结束运行。

当输入为1时,在计算球体体积之前,打印Please enter the radius:,然后读入球体半径,完成计算;
当输入为2时,在计算圆柱体体积之前,打印Please enter the radius and the height:,然后读入底圆半径和高,完成计算;
当输入为3时,在计算圆锥体体积之前,打印Please enter the radius and the height:,然后读入底圆半径和高,完成计算。
计算结果在一行内输出,保留小数点后两位。

输入样例:
1
2
3
2.4 3
0
输出样例:
1-Ball
2-Cylinder
3-Cone
other-Exit
Please enter your command:
Please enter the radius:
33.51
1-Ball
2-Cylinder
3-Cone
other-Exit
Please enter your command:
Please enter the radius and the height:
18.10
1-Ball
2-Cylinder
3-Cone
other-Exit
Please enter your command:

#include <stdio.h>
#include <stdlib.h>    //包含exit()函数
#define PI 3.141592653579    //πvoid menu();    //菜单栏
double ball(double r);    //V-球
double cylinder(double r, double h);    //V-圆柱
double cone(double r, double h);    //V-圆锥int main()
{int n;double r, h;while (1){menu();scanf("%d", &n);switch (n){case 1:printf("Please enter the radius:\n");scanf("%lf", &r);printf("%.2lf\n", ball(r));break;case 2:printf("Please enter the radius and the height:\n");scanf("%lf %lf", &r, &h);printf("%.2lf\n", cylinder(r, h));break;case 3:printf("Please enter the radius and the height:\n");scanf("%lf %lf", &r, &h);printf("%.2lf\n", cone(r, h));break;default:exit(0);    //直接退出}}return 0;
}
void menu()
{printf("1-Ball\n");printf("2-Cylinder\n");printf("3-Cone\n");printf("other-Exit\n");printf("Please enter your command:\n");
}
double ball(double r)
{return ((double)4 / 3) * PI * r * r * r;
}
double cylinder(double r, double h)
{   return PI * r * r * h;
}
double cone(double r, double h)
{    return ((double)1 / 3) * PI * r * r * h;
}

7-188 龟兔赛跑

分数 5
作者 陈建海
单位 浙江大学
乌龟与兔子进行赛跑,跑场是一个矩型跑道,跑道边可以随地进行休息。乌龟每分钟可以前进3米,兔子每分钟前进9米;兔子嫌乌龟跑得慢,觉得肯定能跑赢乌龟,于是,每跑10分钟回头看一下乌龟,若发现自己超过乌龟,就在路边休息,每次休息30分钟,否则继续跑10分钟;而乌龟非常努力,一直跑,不休息。假定乌龟与兔子在同一起点同一时刻开始起跑,请问T分钟后乌龟和兔子谁跑得快?

输入格式:
输入在一行中给出比赛时间T(分钟)。

输出格式:
在一行中输出比赛的结果:乌龟赢输出@@,兔子赢输出_,平局则输出--;后跟1空格,再输出胜利者跑完的距离。

输入样例:
242
输出样例:
@_@ 726

#include <iostream>
#include <cstdio>
using namespace std;int main()
{int t,flag,rest,run;int a,b;cin >>t;a=0;b=0;flag=0;rest=0;run=0;while(t--){if(run==10){   //兔子跑了十分钟就进行判断if(b>=a) flag=1;run=0;      }a+=3;if(!flag){  //兔子跑b+=9;run++;}else{  //兔子休息rest++;if(rest==30){flag=0;rest=0;}}}if(a==b)cout <<"-_- "<<a<<endl;else if(a>b)cout <<"@_@ "<<a<<endl;elsecout <<"^_^ "<<b<<endl;return 0;
}

7-189 冒泡法排序

分数 5
作者 徐镜春
单位 浙江大学
将N个整数按从小到大排序的冒泡排序法是这样工作的:从头到尾比较相邻两个元素,如果前面的元素大于其紧随的后面元素,则交换它们。通过一遍扫描,则最后一个元素必定是最大的元素。然后用同样的方法对前N−1个元素进行第二遍扫描。依此类推,最后只需处理两个元素,就完成了对N个数的排序。

本题要求对任意给定的K(<N),输出扫描完第K遍后的中间结果数列。

输入格式:
输入在第1行中给出N和K(1≤K<N≤100),在第2行中给出N个待排序的整数,数字间以空格分隔。

输出格式:
在一行中输出冒泡排序法扫描完第K遍后的中间结果数列,数字间以空格分隔,但末尾不得有多余空格。

输入样例:
6 2
2 3 5 1 6 4
输出样例:
2 1 3 4 5 6

#include<bits/stdc++.h>
#include<string.h>
#include<cmath>
#include<algorithm>
using namespace std;
int main(){int n,k;cin>>n>>k;int  a[n];for(int i=0;i<n;i++){cin>>a[i];}for(int i=0;i<k;i++){for(int j=0;j<n-i;j++){if(a[j]>a[j+1]){int d=a[j];a[j]=a[j+1];a[j+1]=d;}}}for(int i=0;i<n;i++){cout<<a[i];if(i==n-1)continue;cout<<" ";}return 0;}

7-190 猴子选大王

分数 5
作者 徐镜春
单位 浙江大学
一群猴子要选新猴王。新猴王的选择方法是:让N只候选猴子围成一圈,从某位置起顺序编号为1~N号。从第1号开始报数,每轮从1报到3,凡报到3的猴子即退出圈子,接着又从紧邻的下一只猴子开始同样的报数。如此不断循环,最后剩下的一只猴子就选为猴王。请问是原来第几号猴子当选猴王?

输入格式:
输入在一行中给一个正整数N(≤1000)。

输出格式:
在一行中输出当选猴王的编号。

输入样例:
11
输出样例:
7

#!/usr/bin/python
# -*- coding: utf-8 -*-N=int(input())
ls=[i for i in range(1,N+1)]step=2            #步长
ptr=1while len(ls) > 1:#ptr表示列表中第几个元素,没有第0个元素,只有下标为0的元素ptr=(ptr+step-1)%len(ls)+1#ptr 是 下一个开始的位数del ls[ptr-1]
print(ls[0])

7-191 删除字符串中的子串

分数 5
作者 白洪欢
单位 浙江大学
输入2个字符串S1和S2,要求删除字符串S1中出现的所有子串S2,即结果字符串中不能包含S2。

输入格式:
输入在2行中分别给出不超过80个字符长度的、以回车结束的2个非空字符串,对应S1和S2。

输出格式:
在一行中输出删除字符串S1中出现的所有子串S2后的结果字符串。

输入样例:
Tomcat is a male ccatat
cat
输出样例:
Tom is a male

import java.util.Scanner;
public class Main {public static void main(String[] args) {Scanner sc= new Scanner(System.in);String s1=sc.nextLine();String s2=sc.nextLine();String s3=s1.replace(s2,"");while(!s1.equals(s3)){s1=s3;s3=s1.replace(s2,"");}System.out.println(s3);}
}

7-192 字符串的冒泡排序

分数 5
作者 陈越
单位 浙江大学
我们已经知道了将N个整数按从小到大排序的冒泡排序法。本题要求将此方法用于字符串序列,并对任意给定的K(<N),输出扫描完第K遍后的中间结果序列。

输入格式:
输入在第1行中给出N和K(1≤K<N≤100),此后N行,每行包含一个长度不超过10的、仅由小写英文字母组成的非空字符串。

输出格式:
输出冒泡排序法扫描完第K遍后的中间结果序列,每行包含一个字符串。

输入样例:
6 2
best
cat
east
a
free
day
输出样例:
best
a
cat
day
east
free

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
int main() {int n=0,k=0;
scanf("%d %d",&n,&k);
char s[n][11]; //n个长度为11的字符数组
int i=0;
for(;i<n;i++)
{scanf("%s",s[i]);//仅由小写英文字母组成的非空字符串
}
int m=0;
for(;m<k;m++)//扫描k次    //每遍历一次就确定一个最大值,因此每次遍历的字符串的个数在减少
{//先实现第一轮的比较,
char  temp[11]={'0'};
for(i=0;i<n-1-m;i++)
{int j=0;  //利用ASCII码值进行比较,先比较第一个字母的ASCII值,要是相同再比较下一个字母的ASCII码值  for(;j<11;j++)//若第一个字符就能比较出结果就只会循环一次,若前面的字符都相同 ,则会循环到最后 {if(s[i][j]>s[i+1][j])//前面一个字符串元素比后面大 {strcpy(temp,s[i]);strcpy(s[i],s[i+1]);strcpy(s[i+1],temp);break;//交换完毕跳出循环 }else if(s[i][j]<s[i+1][j])//前面一个字符串元素比后面小{break;//有了结果就直接跳出 } }
}}i=0;
for(;i<n;i++)
{printf("%s",s[i]);if(i!=n-1)printf("\n");
}return 0;}

7-193 字符串循环左移

分数 5
作者 白洪欢
单位 浙江大学
输入一个字符串和一个非负整数N,要求将字符串循环左移N次。

输入格式:
输入在第1行中给出一个不超过100个字符长度的、以回车结束的非空字符串;第2行给出非负整数N。

输出格式:
在一行中输出循环左移N次后的字符串。

输入样例:
Hello World!
2
输出样例:
llo World!He

#include<iostream>
#include<stdio.h>
#include<string.h>
using namespace std;
int main()
{string a;getline(cin,a);int n,i;scanf("%d",&n);n=n%a.size();for(i=n;i<a.size();i++){printf("%c",a[i]);}for(i=0;i<n;i++){printf("%c",a[i]);}return 0;
}

7-194 说反话-加强版

分数 5
作者 陈越
单位 浙江大学
给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。

输入格式:
测试输入包含一个测试用例,在一行内给出总长度不超过500 000的字符串。字符串由若干单词和若干空格组成,其中单词是由英文字母(大小写有区分)组成的字符串,单词之间用若干个空格分开。

输出格式:
每个测试用例的输出占一行,输出倒序后的句子,并且保证单词间只有1个空格。

输入样例:
Hello World Here I Come
输出样例:
Come I Here World Hello

#include<iostream>
#include<string>
#include<sstream>
#include<algorithm>
#include<vector>
using namespace std;
int main()
{string str,temp;vector<string> word;getline(cin,str);//此处不能用cin进行输入,避免遇到空格就停止输入stringstream ss;ss<<str;//字符串放入流中//利用stringstream流分割空格while(ss>>temp){word.push_back(temp);}reverse(word.begin(),word.end());//颠倒字符串数组 //输出结果for(vector<string>::iterator it=word.begin();it!=word.end();it++){if(it!=word.begin()) cout<<" ";//这种写法避免多余空格,避免出现格式错误cout<<*it;}cout<<endl;return 0;
}

7-195 整数分解为若干项之和

分数 5
作者 DS课程组
单位 浙江大学
将一个正整数N分解成几个正整数相加,可以有多种分解方法,例如7=6+1,7=5+2,7=5+1+1,…。编程求出正整数N的所有整数分解式子。

输入格式:
每个输入包含一个测试用例,即正整数N (0<N≤30)。

输出格式:
按递增顺序输出N的所有整数分解式子。递增顺序是指:对于两个分解序列N
1

={n
1

,n
2

,⋯}和N
2

={m
1

,m
2

,⋯},若存在i使得n
1

=m
1

,⋯,n
i

=m
i

,但是n
i+1

<m
i+1

,则N
1

序列必定在N
2

序列之前输出。每个式子由小到大相加,式子间用分号隔开,且每输出4个式子后换行。

输入样例:
7
输出样例:
7=1+1+1+1+1+1+1;7=1+1+1+1+1+2;7=1+1+1+1+3;7=1+1+1+2+2
7=1+1+1+4;7=1+1+2+3;7=1+1+5;7=1+2+2+2
7=1+2+4;7=1+3+3;7=1+6;7=2+2+3
7=2+5;7=3+4;7=7

#include<stdio.h>
#include<math.h>
#include<iostream>
using namespace std;
int flag = 0, n, a[35];
void dfs(int len, int pos, int next)    //len当前长度,pos当前用了多大值,下一个要加的值的大小
{if (pos + next > n)return;                    //如果值大于N就没有继续的必要了a[len++] = next;                //保存路径if (pos+next == n){cout << n << "=";for (int i = 0; i < len; i++){if (i == 0)    cout << a[i];else cout << "+" << a[i];}if (++flag % 4 == 0||next == n)cout << endl;        //每输出四个一次回车else cout << ";";                                                    //每行输出最后一个不带分号}if (pos + next < n){pos += next;for (int i = next; i <= n - pos; i++)//根据规律得出后面的i>=nextdfs(len, pos, i);}}
int main()
{cin >> n;for (int i = 1; i <= n / 2; i++)        //i小于n/2,防止7=3+4、7=4+3该类情况dfs(0, 0, i);dfs(0, 0, n);                    //7=7的时候特殊处理    return 0;
}

7-196 数列求和-加强版

分数 5
作者 DS课程组
单位 浙江大学
给定某数字A(1≤A≤9)以及非负整数N(0≤N≤100000),求数列之和S=A+AA+AAA+⋯+AA⋯A(N个A)。例如A=1, N=3时,S=1+11+111=123。

输入格式:
输入数字A与非负整数N。

输出格式:
输出其N项数列之和S的值。

输入样例:
1 3
输出样例:
123

#include<stdio.h>
void sequencesum(int *p, int m, int n)
{int i,t,num;t = 0;               num = 0;if(n == 0)                                //0个A,单独输出 {printf("0");}  else{for(i=n;i>=1;i--)                     //逆序存储,从最低位开始 {p[t++] = n*m;n = n-1;}t = t-1;                             //找到数组最后一个元素的下标 for(i=0; i<=t; i++)                  //用数组进位 {num = p[i]/10;p[i]=p[i]%10;if(i != t)                         {p[i+1] = p[i+1]+num;}}t = t+1;                            //数组最后一个下标的再下一个下标,此时为空,可以放数据     for(;num>0;)                        //把最高位往前推 {p[t++] = num%10;num = num/10;}for(i=t-1; i>=0; i--)              // 逆序输出数组元素 {printf("%d",p[i]);} }
}int main()
{int a[518028];                          //int型数组最大容量 int A,N;scanf("%d%d",&A,&N);sequencesum(a, A, N);return 0;
}

7-197 输出全排列

分数 7
作者 DS课程组
单位 浙江大学
请编写程序输出前n个正整数的全排列(n<10),并通过9个测试用例(即n从1到9)观察n逐步增大时程序的运行时间。

输入格式:
输入给出正整数n(<10)。

输出格式:
输出1到n的全排列。每种排列占一行,数字间无空格。排列的输出顺序为字典序,即序列a
1

,a
2

,⋯,a
n

排在序列b
1

,b
2

,⋯,b
n

之前,如果存在k使得a
1

=b
1

,⋯,a
k

=b
k

并且 a
k+1

<b
k+1

输入样例:
3
输出样例:
123
132
213
231
312
321

#include<stdio.h>int a[9] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
// 输出全排列
void print_permutation(int n)
{int len = 1, i, pos, t, des;while (1){for (i = 0; i < n; i++){printf("%d", a[i]);}printf("\n");len = 1;for (i = n-1; i > 0; i--){if (a[i] > a[i-1]){pos = i-1;break;}else{len++;}}if (len == n)break;for (i = n-1; i >= n-len; i--){if (a[pos] <= a[i]){des = i;break;}}t = a[des]; a[des] = a[pos]; a[pos] = t;for (i = 1; i <= len/2; i++){t = a[pos+i];a[pos+i] = a[n-i];a[n-i] = t;}}
}int main()
{int i, n;scanf("%d", &n);if (n == 1)printf("1");elseprint_permutation(n);return 0;
}

7-198 N个数求和

分数 6
作者 陈越
单位 浙江大学
本题的要求很简单,就是求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<iostream>
#include<cmath> using namespace std;int GCD(int a, int b)//求最大公约数
{if (b == 0) return a;else return GCD(b, a%b);
}int main()
{int n, a, b, nume, deno, divisor;//numerator 为和的分子,简写nume,denominator为和的分母,简写demo scanf("%d%d/%d", &n, &nume, &deno);for (int i = 1; i < n; i++){scanf("%d/%d", &a, &b);nume = nume * b + a * deno;               //通分之后的分子 deno *= b;                               //通分之后的分母divisor = GCD(abs(nume), abs(deno));  //divisor为最大公因数 nume /= divisor;                       //分子约分 deno /= divisor;                        //分母约分   }// 如果是分母为负数,需要分子分母交换一下符号,输出时候如果分数是负数的话 负号要在前面if (deno < 0) { deno = -deno; nume = -nume;}if (nume && nume / deno == 0)printf("%d/%d\n", nume, deno);               //不能用if(nume<deno)通不过,用 abs(nume)<deno可以 else if (nume%deno == 0)printf("%d\n", nume / deno);              //如果nume=0,则包含在nume%deno==0这种情况中,这是一个测试点 elseprintf("%d %d/%d\n", nume / deno, nume%deno, deno);return 0;
}

7-199 A-B

分数 5
作者 陈越
单位 浙江大学
本题要求你计算A−B。不过麻烦的是,A和B都是字符串 —— 即从字符串A中把字符串B所包含的字符全删掉,剩下的字符组成的就是字符串A−B。

输入格式:
输入在2行中先后给出字符串A和B。两字符串的长度都不超过10
4
,并且保证每个字符串都是由可见的ASCII码和空白字符组成,最后以换行符结束。

输出格式:
在一行中打印出A−B的结果字符串。

输入样例:
I love GPLT! It’s a fun game!
aeiou
输出样例:
I lv GPLT! It’s fn gm!

#include <iostream>
#include<string>
using namespace std;
int main()
{string str1, str2, str3;//string类型不能使用cin输入空格,getline(cin, str1);getline(cin, str2);for (int i = 0; i < str1.length() ; i++){int n = 1;for (int j = 0; j < str2.length() ; j++){if (str2[j] == str1[i]){n = 0;break;}}if (n){str3 = str3+str1[i];}}cout << str3;return 0;
}

7-200 天梯赛的善良

分数 6
作者 陈越
单位 浙江大学
天梯赛是个善良的比赛。善良的命题组希望将题目难度控制在一个范围内,使得每个参赛的学生都有能做出来的题目,并且最厉害的学生也要非常努力才有可能得到高分。

于是命题组首先将编程能力划分成了 10
6
个等级(太疯狂了,这是假的),然后调查了每个参赛学生的编程能力。现在请你写个程序找出所有参赛学生的最小和最大能力值,给命题组作为出题的参考。

输入格式:
输入在第一行中给出一个正整数 N(≤2×10
4
),即参赛学生的总数。随后一行给出 N 个不超过 10
6
的正整数,是参赛学生的能力值。

输出格式:
第一行输出所有参赛学生的最小能力值,以及具有这个能力值的学生人数。第二行输出所有参赛学生的最大能力值,以及具有这个能力值的学生人数。同行数字间以 1 个空格分隔,行首尾不得有多余空格。

输入样例:
10
86 75 233 888 666 75 886 888 75 666
输出样例:
75 3
888 2

n=int(input())
a=[eval(i) for i in input().split()]
a.sort()
print(a[0],a.count(a[0]))
print(a[len(a)-1],a.count(a[len(a)-1]),end='')

pta初级题库151-200相关推荐

  1. pta初级题库题解1~50

    #7.1判断素数 7-1 判断素数. 判断输入的整数是否是素数,如果是则输出"1",否则输出"0". 输入格式: 输入一个整数. 输出格式: 按照要求输出1或者 ...

  2. 计算机维修工初级题库网盘,初级计算机维修工技能试卷.pdf

    过 初级计算机维修工技能试卷 A.显示卡插接不良 B.显示驱动程序出错 称 C.主机故障 D.显示器行同步不良 职业技能鉴定国家题库 名 10.电脑里最基础部件是( A ) 位 超 计算机维修工初级理 ...

  3. 计算机及外设维修工初级题库,维修电工技师题库(5)

    69 数控机床对位置检测装置的要求是什么? 答:数控机床对位置检测装置的要求是能满足运动速度和精度的要求.工作可靠.使用维护方便和经济耐用. 70 什么是半导体存储器?半导体存储器按存储信息的功能分为 ...

  4. 1+x大数据应用开发(java)理论题库/初级题库测验10

  5. PTA 补充题库 7-19 评委打分

    班级里要搞智力竞赛啦!同学们都踊跃参加.进入最后决赛的是10个同学,随着一道道题目的出示,有时是1号选手得分,有时是5号选手得分,每次答对者得10分,最后结果如何呢? 输入格式: 第一行有十个整数,表 ...

  6. PTA 补充题库 7-18 冒泡法排序

    将N个整数按从小到大排序的冒泡排序法是这样工作的:从头到尾比较相邻两个元素,如果前面的元素大于其紧随的后面元素,则交换它们.通过一遍扫描,则最后一个元素必定是最大的元素.然后用同样的方法对前N−1个元 ...

  7. 无忧考吧java的题库准吗,无忧考吧题库_无忧考吧从业题库难度和真正考试难度一样吗_淘题吧...

    『壹』 无忧考吧题库有效期365天什么意思 就是自从你开通会员开始算起,一年365天享有会员权限 『贰』 会计从业资格考试题库哪家的比较好,中华会计,东奥,还是无忧考吧的... 要我说吧,无所谓,两家 ...

  8. 会计初级系统计算机怎么样,原来初级会计题库有这么多作用 一文一探究竟!(电脑版)...

    2020年初级会计考试备考,大家都学习到哪了呢?千万别说你还没开始呢,因为很多人都已经到了基础学习阶段(注意:这已经是第二遍的学习了),假如你就是那还没有开始学习的人群中一员,希望你还是有点自觉性,赶 ...

  9. 2022年电工(初级)国家题库及模拟考试

    题库来源:安全生产模拟考试一点通公众号小程序 2022电工(初级)操作考试题是电工(初级)练习题仿真模拟预测!2022年电工(初级)国家题库及模拟考试依据电工(初级)考试教材.电工(初级)全部考试题库 ...

  10. pta中c语言编程问题答案,pta题库答案_浙大远程教育2015秋 程序设计基础C 求PTA实验代码题库liujiahai-C答案_淘题吧...

    1. PTA(拼题A)的做题邀请码怎么得 进入中国大学mooc,点击课程 ,进入课程公告,查看邀请码 2. pta这道题目部分错误应该错在哪里 你的并查集是不是写错了?还有大数组放到函数外面,判断俱乐 ...

最新文章

  1. [WCF编程]1.WCF入门示例
  2. android平板截屏方法,Android 各种截屏方法
  3. java中的浮点数相加
  4. html京东快报,练习3:仿京东快报.html
  5. java 保留小数点后N位数(若干位),几种实现的方式总结
  6. 通过Backtrack Linux 来加强你的安全防御
  7. paip.快速查找定位文件VS2010
  8. 图书管理系统课程设计
  9. android渠道编号,Android 不同渠道差异代码
  10. 天梯赛——L1-009 N个数求和 (20 分)
  11. html书写表单laber,day02_HTML表格列表表单
  12. 链改价值节点,构建区块链命运共同体
  13. 在PYNQ-Z2上移植RISC-V
  14. 智能经济大局下,云智一体的“形胜”
  15. The Physical Layer
  16. linux系统查找dat文件命令,linux下的一些常用命令
  17. Simulink中传递函数transfer fcn中迟滞参数如何设置
  18. Installing Db2 on-prem on CentOS 7
  19. V831体验—烧录系统
  20. 分享:电脑虚拟内存到底能不能关掉

热门文章

  1. 前端大佬们都在使用的JavaScript工具函数宝典-内含95个工具函数方法
  2. M70仿真系统软件下载和使用
  3. javascript XMLHttpRequest实现下载文件
  4. openCV5-getTickCount
  5. 3dmax简单制作方法
  6. Java设计模式之模板方法模式
  7. 计算机网络与综合布线系统设计,浅谈计算机网络综合布线系统设计
  8. python 爬虫入门(3) proxy详解 代理详解
  9. 【全套完结】数字电子技术基础——全套实验手册及仿真工艺实习【建议保存】
  10. oracle 韩思捷,oracle