螺旋方阵
题目描述
螺旋方阵
输入
一个整数n(0<n<10)
输出
一个n行方阵,每行n个数,每个数场宽为3
样例输入
5
样例输出
1 2 3 4 5
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
int n;
cin >> n;
int loop = n / 2;
int a[11][11] = { 0 };
int startX = 0, startY = 0;
int num = 1;
int offset = 1;
int i, j;
while (loop--)
{
i = startX;
j = startY;
for (j = startY; j < startY + n - offset; j++)
a[startX][j] = num++;
for (i = startX; i < startX + n - offset; i++)
a[i][startY + n - offset] = num++;
for (j = startY + n - offset; j > startY; j--)
a[startX + n - offset][j] = num++;
for (i = startX + n - offset; i > startX; i--)
a[i][startY] = num++;
startX++;
startY++;
offset += 2;
}
int mid = n / 2;
if (n % 2 == 1)
{
a[mid][mid] = n * n;
}
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
cout << setw(3) << a[i][j];
}
cout << endl;
}
return 0;
}
我是第几个单词
题目描述
输入一个英文句子,例如:“This is a Book",单词之间以一个空格来分隔。接着再输入一个单词A,请找出首次在句子中出现的与A相同的单词,是句子中的第几个单词,若不存在,则输出该句子中单词字符的总个数。 例如对上句子而言,若输入单词“is”,则应输出:2 若输入单词“isa”,则应输出:11
输入
第一行为以‘.’结束的一个词组(仅由若干个单词组成,单词间由一空格隔开,除单词和最后的“.”以外,不含其它字符)
第二行是一个单词(不含空格)
输出
一个整数
样例输入
This is a Book
Book
样例输出
4
#include <iostream>
#include <string>
#include <cmath>
using namespace std;
int main()
{
string str1;
string str2;
int num1 = 0;
int word_number = 1;
int nearest = 9999;
int num2 = 0;
getline(cin, str1);
getline(cin, str2);
str2 = " " + str2 ;
int a = str1.find(str2);
if (a >= 0)
{
for (int i = 0; i < str1.size(); i++)
{
if (str1[i] == ' ')
{
num2++;
if (abs(i - a) < nearest)
{
nearest = abs(i - a);
if (nearest == 0)
{
break;
}
}
}
}
cout << num2 + 1;
}
else if (a < 0)
{
for (int i = 0; i < str1.size(); i++)
{
if ((str1[i] > 64 && str1[i] < 91) || (str1[i] > 96 && str1[i] < 123))//ASCII码中字母对应的值
{
num1++;
}
}
cout << num1;
}
return 0;
}
完全背包
题目描述
有n种物品和一个总重量是W的背包,每种物品都有无限件可用。
第i种物品的重量是wi,价值是vi
求解将哪些物品装入背包,可使这些物品的总重量不超过W,且总价值最大。输出最大价值。
输入
第一行两个整数n和W
接下来n行,每行两个整数wi和vi
输出
一个整数,表示最大价值
样例输入 复制
4 5
1 2
2 4
3 4
4 5
样例输出 复制
10
#include <iostream>
#include <cstdio>
#define N 1100
using namespace std;
int main(){
int n, m;
int v[N], w[N];
int a[N][N];
cin >> n >> m;
for(int i = 1; i <= n; i++) cin >> v[i] >> w[i];
for(int i = 1; i <= n; i++){
for(int j = 0; j <= m; j++){
for(int k = 0; k <= j/v[i]; k++)
a[i][j] = max( a[i-1][j], a[i-1][j - k*v[i]] + k*w[i] );
}
}
cout << a[n][m] << endl;
return 0;
}
判断正负数或零
输入一个整数,判断它是正数、负数或零。
输入输出要求:
输入的数是正数时,输出该数>0
输入的数是负数时,输出该数<0
输入的数是0时,输出 0=0
样例输入1
5
样例输出1
5>0
样例输入2
-7
样例输出1
-7<0
样例输入3
0
样例输出3
0=0
输入
一个整数n
输出
按题目要求输出判断结果
样例输入 复制
6
样例输出 复制
6>0
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
int n;
cin>>n;
if(n<0)
{
cout<<n<<"<0";
}
else if(n>0)
{
cout<<n<<">0";
}
else
{
cout<<"0=0";
}
}
骨牌的铺法
有 2*n的一个长方形方格,用一个1*2的骨牌铺满方格。编写一个程序,试对给出的任意一个n(n>0), 输出铺法总数。
例如n=3时,有以下3种铺法:
输入
一个数n
n<=4000
输出
一个数字,表示铺法总数
样例输入 复制
2
样例输出 复制
2
#include<bits/stdc++.h>
using namespace std;
long long f(int n)
{
int a[4010];
int i;
a[1]=1;
a[2]=2;
for(i=3;i<=n;i++)
{
a[i]=a[i-1]+a[i-2];
}
return a[n];
}
int main(){
int n;
cin>>n;
printf("%ld\n",f(n));
return 0;
}
简单背包问题
题目描述
简单的背包问题。设有一个背包,可以放入的重量为s。现有n件物品,重量分别为w1,w2…,wn,(1≤i≤n)均为正整数,从n件物品中挑选若干件,使得放入背包的重量之和正好为s。
输入
第一行两个整数包括放入的物品重量为s(s<=32767)和物品的件数n(n<=50);
第二行n个整数,表示每件物品的重量(输入数据均为正整数)
输出
若满足条件则输出"YES",若不满足则输出"NO"。
样例输入 复制
20 5
1 3 5 7 9
样例输出 复制
YES
#include<iostream>
using namespace std;
int k(int s,int n,int a[])
{
if(s==0)
return 1;
if(s<0||(s>0&&n<1))
return 0;
if(k(s-a[n-1],n-1,a))
{
return 1;
}
else
return k(s,n-1,a);
}
int main()
{
int s,n,a[100],t;
cin>>n>>s;
for(int i=0;i<n;i++)
cin>>a[i];
t=k(s,n,a);
if(t==0)
cout<<"NO"<<endl;
else
cout<<"YES"<<endl;
return 0;
}
计算N的阶乘
题目描述
请计算n的阶乘(1<=n<=100)
n的阶乘计算公式为:n!=n*(n-1)*(n-2)*...*1,如:5!=5*4*3*2*1=120
输入
一个整数n(1<=n<=100)
输出
n的阶乘
样例输入 复制
20
样例输出 复制
2432902008176640000
这题要高精度
#include<iostream>
using namespace std;
int main()
{
int a[2000] = { 0 };
int n;
int i,j,m,jing;//jing进位
cin >> n;
a[0] = 1;
for (i = 1; i <= n; i++)
{
jing = 0;
for (j = 0; j < 2000; j++)
{
m = a[j] * i + jing;
a[j] = m % 10;
jing = m / 10;
}\
}
for (i = 1999; i >= 0; i--)
{
if (a[i])
break;
}
for (j = i; j >= 0; j--)
cout << a[j];
return 0;
}
求数列的第n项的值是多少?
题目描述
输入
输出
样例输入 复制
10
样例输出 复制
4
#include<iostream>
using namespace std;
int main()
{
int n,m;
cin>>n;
m=n;
for(int i=1;i<=20;i++)
{
for(int j=1;j<=i;j++)
{
m--;
if(m==0)
{
cout<<i;
return 0;
}
}
}
return 0;
}
请问一个正整数能够整除几次2?
题目描述
请问一个正整数n能够整除几次2?
比如:4可以整除2次2,100可以整除2次2,9可以整除0次2。
输入
从键盘读入一个正整数n
输出
输出一个整数,代表n能够整除2的次数
样例输入 复制
8
样例输出 复制
3
#include<stdio.h>
int main()
{
int n, sum = 0;
scanf("%d", &n);
while(n > 1){
if(n%2 == 1) break;
n/=2;
sum++;
}
printf("%d",sum);
return 0;
}