1518
给你一些扑克,每张都对应一个点数,分别对应1-13,K 就是13;J 是11;Q是12;
现在想从这些扑克牌中取出一些牌,让这些牌的点数的和等于一个幸运数值P,问有多少种方案?
#include <iostream>
using namespace std;
int n,tp,ans=0;
int num=0;
int a[30];
int dfs(int ans,int k)
{
if (k==n+1)
{
if (ans==tp) num++;
return 0;
}
dfs(ans,k+1);
dfs(ans+a[k],k+1);
return 0;
}
int main()
{
cin>>n>>tp;
for(int i=1;i<=n;i++)
cin>>a[i];
dfs(ans,1);
cout<<num<<endl;
return 0;
}
1604 QWQ来到了一个神奇的地方,这个地方有很多颜色不同的彩色石,每个颜色都可以用一个数字来代替,QWQ收集了一堆石子,他想知道这堆石子中颜色相同的石子个数的最大值
#include <bits/stdc++.h>
using namespace std;
map<int,int>vis;
int main()
{
int n,ans=0;
int a[101];
cin>>n;
for(int i=1;i<=n;i++)
{cin>>a[i];
vis[a[i]]++;
ans=max(ans,vis[a[i]]);
}
cout<<ans<<endl;
return 0;
}
输入 n 个学生的信息,每个学生信息包括姓名、身高、学号。编程输出身高最高的学生的信息。
Input
第 1 行一个正整数 n,表示学生个数,n≤100。
以下 n 行,每一行依次输入学生的姓名、身高、学号。
Output
输出最高的学生信息,如存在身高一样的请输出学号小的那个同学。
Sample Input
5
John 172 20160302
David 173 20160306
Jason 168 20160309
Jack 152 20160311
Kitty 147 20160319
Sample Output
David 173 20160306
#include <bits/stdc++.h>
using namespace std;
struct node
{
string name,h,num;
}p[101];
bool cmp(node a,node b)
{
if(a.h!=b.h)return a.h>b.h;
else return a.num<b.num;
}
int main()
{
int n,i;
cin>>n;
for(i=0;i<n;i++)
cin>>p[i].name>>p[i].h>>p[i].num;
sort(p,p+n,cmp);
printf("%s %s %s\n",p[0].name.c_str(),p[0].h.c_str(),p[0].num.c_str());
return 0;
}
有 N 个人排成一排,假设他们的身高均为正整数,请找出其中符合以下条件的人:排在他前面且比他高的人数与排在他后面且比他高的人数相等。
Input
第一行为一个正整数 N,1<N<1000,表示有多少个人。
下面 N 行,每行一个正整数,表示从前往后每个人的身高,假设每个人的身高≤10000。
Output
一行一个整数,表示满足这个条件的人数。
Sample Input
4
1
2
1
3
Sample Output
2
Hint
第 3、第 4 个人满足条件。
单组输入
#include <bits/stdc++.h>
using namespace std;
int h[1001],n,i,j,ans,t1,t2;
int main()
{
scanf("%d",&n);
for(i=1;i<=n;i++)
scanf("%d",&h[i]);
for(i=1;i<=n;i++)
{
t1=t2=0;
for(j=1;j<i;j++)
if(h[j]>h[i])
t1++;
for(j=i+1;j<=n;j++)
if(h[j]>h[i]) t2++;
if(t1==t2) ans++;
}
printf("%d\n",ans);
return 0;
}
给定两个整数矩阵,求两个矩阵的积。本题20分
Input
输入数据有1组,每组的第1行为m,n(<10),分别表示矩阵1的行与列数,和矩阵2的列与行,接下来是两个矩阵;
Output
输出两个矩阵的积。
Sample Input
3 4
1 2 3 4
5 6 7 8
9 10 11 12
3 4 5
6 7 8
9 2 1
2 3 4
Sample Output
50 36 40
130 100 112
210 164 184
#include <bits/stdc++.h>
using namespace std;
int n,m,a[10][10],b[10][10],ans[10][10];
int main()
{
while(scanf("%d%d",&n,&m)!=-1)
{
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
scanf("%d",&a[i][j]);
for(int i=1;i<=m;i++)
for(int j=1;j<=n;j++)
scanf("%d",&b[i][j]);
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
for(int k=1;k<=m;k++)
ans[i][j]=ans[i][j]+a[i][k]*b[k][j];
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
j==n?printf("%d\n",ans[i][j]):printf("%d ",ans[i][j]);
}
return 0;
}
从键盘输入6个字符串,请使用指针数组的方法将它们从大到小排序!
Input
输入数据有多组,每组6个字符串(长度小于20)
Output
输出排序后的结果。注意,最后一个串后面有1个空格!
Sample Input
good cat hello alg wow jsj01
Sample Output
wow jsj01 hello good cat alg
#include <bits/stdc++.h>
using namespace std;
struct stu
{
char a[100];
};
bool cmp(stu m,stu n)
{
int t=strcmp(m.a,n.a);
return t>0;
}
int main()
{
stu p[100];
int i;
while(scanf("%s",p[1].a)!=-1)
{
for(i=2;i<=6;i++)
scanf("%s",p[i].a);
sort(p+1,p+7,cmp);
for(i=1;i<=6;i++)
printf("%s ",p[i].a);
printf("\n");
}
return 0;
}
给出一个字符串S,计算S中有多少连续子串是回文串。
Input
输入包含多组测试数据。每组输入是一个非空字符串,长度不超过5000
Output
对于每组输入,输出回文子串的个数
Sample Input
aba
aa
Sample Output
4
3
Hint
输入样例二:
aaaaaa
输出样例二:
21
#include <bits/stdc++.h>
using namespace std;
int main()
{
string s,s1,tmp;
while(cin>>s)
{
int num=s.size(),ans=0;
for(int i=0;i<num;i++)
{
for(int j=1;j<=(num-i);j++)
{
s1=s.substr(i,j);
tmp=s1;
reverse(s1.begin(),s1.end());
if(tmp==s1)
ans++;
}
}
cout<<ans<<endl;
}
return 0;
}
已知数列 1 1 2 3 5 8 13
Input
计算第n项的值 (1<=n<=15)
Output
输出题意
Sample Input
3
Sample Output
2
#include <bits/stdc++.h>
using namespace std;
long long f(int n)
{
if(n==1||n==2)
return 1;
else
return f(n-1)+f(n-2);
}
int main()
{
int n,ans;
while(cin>>n)
{
ans=f(n);
cout<<ans<<endl;
}
return 0;
}