目录
冒泡排序
题目描述
从键盘上输入10个整数,用冒泡法对这10个数进行排序(由小到大)。
输入
以空格分隔的10个整数
输出
依次输出排好序的10个整数,每个数占一行。
样例输入 Copy
1 3 5 7 9 2 4 6 8 0
样例输出 Copy
0 1 2 3 4 5 6 7 8 9
#include<bits/stdc++.h>
using namespace std;
int main()
{
int a[10],i;
for(i=0;i<10;i++){
scanf("%d",a+i);
}
int j;
for(j=0;j<10;j++){
for(i=j+1;i<10;i++){
if(a[j]>a[i])
swap(a[j],a[i]);
}
}
for(i=0;i<10;i++){
printf("%d\n",a[i]);
}
return 0;
}
判断素数
题目描述
写一个函数判断一个正整数是否为素数。在主函数中输入一个大于1的正整数,通过调用这个函数,输出该数是否为素数的信息。
如果该数为素数,输出信息为:
Prime!
若该数不为素数,则输出信息为:
Not Prime!
输入输出在主函数中进行。
输入
输入一个大于1的正整数。
输出
对输入的正整数进行素数的判定:
如果该数为素数,输出信息为:
Prime!
若该数不为素数,则输出信息为:
Not Prime!
输出信息单独占一行。样例输入 Copy
18
样例输出 Copy
Not Prime!
#include<bits/stdc++.h>
using namespace std;
int aa(int n){
int i;
if(n==1)
return 0;
for(i=2;i<=sqrt(n);i++){
if(n%i==0)
return 0;
}
return 1;
}
int main()
{
long long n;
while(cin>>n){
if(aa(n))
printf("Prime!\n");
else
printf("Not Prime!\n");
}
return 0;
}
对称矩阵
题目描述
输入一个N维矩阵,判断是否对称。
输入
输入第一行包括一个数:N(1<=N<=100),表示矩阵的维数。
接下来的N行,每行包括N个数,表示N*N矩阵的元素。输出
可能有多组测试数据,对于每组数据,
输出"Yes!”表示矩阵为对称矩阵。
输出"No!”表示矩阵不是对称矩阵。样例输入 Copy
1 68 3 1 70 25 70 79 59 25 59 63 3 6 46 82 28 62 92 96 43 28
样例输出 Copy
Yes! Yes! No!
#include<bits/stdc++.h>
using namespace std;
int main()
{
long long n;
int i,j;
while(cin>>n){
int a[n][n];
for(i=0;i<n;i++){
for(j=0;j<n;j++){
scanf("%d",&a[i][j]);
}
}
int flag=1;
for(i=0;i<n;i++){
for(j=0;j<n-i;j++)
{
if(a[i][j]!=a[j][i])
flag=0;
}
}
if(flag)
cout<<"Yes!"<<endl;
else
cout<<"No!"<<endl;
}
return 0;
}
矩阵对角求和
题目描述
求一个n×n矩阵对角线元素之和,其中1≤n<100,矩阵元素都小于10000。
输入
第一行是一个正整数n。
然后是n行,每行对应矩阵的每行,元素间用空格隔开。
输出
第一行为主对角线元素和,第二行为副对角线的元素和。
样例输入 Copy
3 5724 1478 9358 6962 4464 5705 8145 3281 6827
样例输出 Copy
17015 21967
#include<bits/stdc++.h>
using namespace std;
int main()
{
long long n;
int i,j;
while(cin>>n){
int a[n][n];
for(i=0;i<n;i++){
for(j=0;j<n;j++){
scanf("%d",&a[i][j]);
}
}
int sum1,sum2;
sum1=sum2=0;
for(i=0;i<n;i++){
sum1+=a[i][i];
sum2+=a[i][n-i-1];
}
printf("%d\n%d\n",sum1,sum2);
}
return 0;
}
字符统计
题目描述
输入一行字符串(字符串长度小于10000,由大小写字母、阿拉伯数字和空格组成),分别统计出其中大写英文字母,小写英文字母、阿拉伯数字和空格的个数。
输入
一行字符串(字符串长度小于10000,由大小写字母、阿拉伯数字和空格组成)
输出
分别输出大写英文字母,小写英文字母、阿拉伯数字和空格的个数,用空格隔开
样例输入 Copy
h0u84nfx 7
样例输出 Copy
0 5 4 1
#include<bits/stdc++.h>
using namespace std;
int main()
{
char a[10000];
gets(a);
int i;
int b,c,d,f;
b=c=d=f=0;
for(i=0;i<strlen(a);i++){
if(isupper(a[i]))
b++;
else if(islower(a[i]))
c++;
else if(isdigit(a[i]))
d++;
else
f++;
}
printf("%d %d %d %d\n",b,c,d,f);
return 0;
}
百元百鸡
题目描述
百元百鸡问题。每只母鸡3元,每只公鸡4元,每只小鸡0.5元,如果花100元钱买100只鸡,请问有哪些可能?试编程输出所有的组合。【注:每种鸡的数量都可以为零】
输入
无
输出
输出购买方案
每一种方案输出占一行,且每行按照母鸡,公鸡,小鸡的次序输出
然后行按照母鸡数量由小到大的次序输出。
例如:
x1 x2 x3
y1 y2 y3
z1 z2 z3
其中 x1 < y1 < z1
#include<bits/stdc++.h>
using namespace std;
int main()
{
int i,j,k;
for(i=0;i<=100/3;i++){
for(j=0;j<=100/4;j++){
if(i*3+j*4+(100-i-j)*0.5==100)
cout<<i<<" "<<j<<" "<<(100-i-j)<<endl;
else
continue;
}
}
return 0;
}
汽水瓶
题目描述
有这样一道智力题:“某商店规定:三个空汽水瓶可以换一瓶汽水。小张手上有十个空汽水瓶,她最多可以换多少瓶汽水喝?”答案是5瓶,方法如下:先用9个空瓶子换3瓶汽水,喝掉3瓶满的,喝完以后4个空瓶子,用3个再换一瓶,喝掉这瓶满的,这时候剩2个空瓶子。然后你让老板先借给你一瓶汽水,喝掉这瓶满的,喝完以后用3个空瓶子换一瓶满的还给老板。如果小张手上有n个空汽水瓶,最多可以换多少瓶汽水喝?
输入
输入文件最多包含10组测试数据,每个数据占一行,仅包含一个正整数n(1<=n<=100),表示小张手上的空汽水瓶数。n=0表示输入结束,你的程序不应当处理这一行。
输出
对于每组测试数据,输出一行,表示最多可以喝的汽水瓶数。如果一瓶也喝不到,输出0。
样例输入 Copy
3 10 81 0
样例输出 Copy
1 5 40
#include<bits/stdc++.h>
using namespace std;
int aa(int n){
if(n==2||n==3)
return 1;
else
return n/3+aa(n/3+n-n/3*3);
}
int main()
{
int n;
while(cin>>n&&n){
int s=aa(n);
cout<<s<<endl;
}
return 0;
}
一只小蜜蜂...
题目描述
有一只经过训练的蜜蜂只能爬向右侧相邻的蜂房,不能反向爬行。请编程计算蜜蜂从蜂房a爬到蜂房b的可能路线数。
其中,蜂房的结构如下所示。输入
多组数据输入,每组数据包含两个正整数a, b,且 a<b。
输出
蜜蜂从蜂房a爬到蜂房b的可能路线数。
样例输入 Copy
1 2 3 4
样例输出 Copy
1 1
#include<bits/stdc++.h>
using namespace std;
int aa(int a,int b){
if(b==a+1)
return 1;
else if(b==a+2)
return 2;
else
return aa(a,b-1)+aa(a,b-2);
}
int main()
{
int a,b;
int i,j;
while(cin>>a>>b){
int s=aa(a,b);
printf("%d\n",s);
}
return 0;
}
倒序输出
题目描述
使用递归编写一个程序,逆序输出一个正整数。例如输入1234,输出4321。
输入
多组输入,每组输入一个正整数。
输出
逆序输出结果,每个结果占一行。
样例输入 Copy
12 1234
样例输出 Copy
21 4321
#include<bits/stdc++.h>
using namespace std;
int main()
{
long long n;
while(cin>>n){
int a[100];
int i=0;
while(n){
a[i]=n%10;
n/=10;
i++;
printf("%d",a[i-1]);
}
cout<<endl;
}
return 0;
}
数字求和
题目描述
使用递归编写一个程序,计算一个正整数中所有数字之和。例如输入234,输出9
输入
多组输入,每组输入一个正整数。
输出
输出结果,每个结果占一行。
样例输入 Copy
234
样例输出 Copy
9
#include<bits/stdc++.h>
using namespace std;
int aa(int a){
if(a/10==0)
return a%10;
else
return a%10+aa(a/10);
}
int main()
{
int a;
int i,j;
while(cin>>a){
int s=aa(a);
cout<<s<<endl;
}
return 0;
}
骨牌铺方格
题目描述
用大小为1×2的骨牌铺满一个大小为2×n的长方形方格,编写一个程序,输入n,输出铺放方案总数。例如,输入n=3,即大小为2×3的方格,输出3。3种骨牌铺放方案如下图所示:
输入
多组测试用例,每一组是一个正整数。
输出
每组输出占一行。
只需要输出铺放方案总数,不需要输出具体的铺放方案。样例输入 Copy
3
样例输出 Copy
3
递归解法(原题提交超时):
#include<bits/stdc++.h>
using namespace std;
long long aa(long long n){
if(n==2)
return 2;
else if(n==3)
return 3;
else
return aa(n-1)+aa(n-2);
}
int main()
{
long long n;
while(cin>>n){
cout<<aa(n)<<endl;
}
return 0;
}
非递归解法(不超时):
#include<bits/stdc++.h>
using namespace std;
typedef long long lint;
int main()
{
lint fun[55];
int i;
fun[1]=1;
fun[2]=2;
for(i=3;i<51;++i){
fun[i]=fun[i-1]+fun[i-2];
}
long long n;
while(cin>>n){
cout<<fun[n]<<endl;
}
return 0;
}
递归计数
题目描述
编写一个递归函数,返回一个字符串中大写字母的数目。例如,输入“AbcD”,输出2。
输入
多组输入,每组包括一个仅由大小写字母组成的字符串。
输出
输出字符串中出现大写字母的数目。
样例输入 Copy
AbcD
样例输出 Copy
2
#include<bits/stdc++.h>
using namespace std;
int aa(string s,int n){
if(n==0){
if(isupper(s[n]))
return 1;
else
return 0;
}
else{
if(isupper(s[n]))
return 1+aa(s,--n);
else
return 0+aa(s,--n);
}
}
int main()
{
string s;
while(getline(cin,s)){
int sum=aa(s,s.length());
cout<<sum<<endl;
}
return 0;
}