给水题打个包……
链接: http://pan.baidu.com/s/1o6mJ862 密码: b6ya
生日相同 2.0
#include<bits/stdc++.h>
using namespace std;
list<string>L[13][33];
int n;
bool cmp(string a,string b){
return a.length()<b.length()||(a.length()==b.length()&&(a<b));
}
int main(){
cin>>n;
for(int i=1;i<=n;i++){
string s;int x,y;
cin>>s>>x>>y;
L[x][y].push_back(s);
}int ok=0;
for(int i=1;i<=12;i++)
for(int j=1;j<=31;j++){
if(L[i][j].size()<=1)continue;
cout<<i<<" "<<j<<" ";
L[i][j].sort(cmp);
for(list<string>::iterator it=L[i][j].begin();
it!=L[i][j].end();it++){
ok=1;cout<<*it<<" ";
}puts("");
}if(!ok)puts("None");
return 0;
}
删除数组中的元素(链表)
#include<cstdio>
#include<iostream>
#include<map>
using namespace std;
int a[200001];
int main(){
int n,k;
cin>>n;
for(int i=1;i<=n;i++)cin>>a[i];
cin>>k;
for(int i=1;i<=n;i++)if(a[i]-k)printf("%d ",a[i]);
}
统计学生信息(使用动态链表完成)
#include<cstdio>
#include<iostream>
#include<map>
using namespace std;
string a[200001];
int n;
int main(){
string s;
while(getline(cin,s)&&s!="end")a[n++]=s;
for(int i=n-1;i>=0;i--)cout<<a[i]<<endl;
}
计算矩阵边缘元素之和
#include<bits/stdc++.h>
using namespace std;
int T,n,m;
int a[201][201];
long long ans=0;
int main(){
cin>>T;
while(T--){
cin>>n>>m;ans=0;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++){
cin>>a[i][j];
if(i==1||i==n||j==1||j==m)ans+=a[i][j];
}cout<<ans<<endl;
}
return 0;
}
二维数组右上左下遍历
#include<bits/stdc++.h>
using namespace std;
int T,n,m;
int a[201][201];
long long ans=0;
int main(){
cin>>n>>m;
memset(a,-1,sizeof a);
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
cin>>a[i][j];
for(int i=1;i<=n+m;i++){
int x=1,y=i;
while(x<=n&&y>=1){
if(a[x][y]!=-1)
printf("%d\n",a[x][y]);
x++;y--;
}
}
return 0;
}
字符串中最长的连续出现的字符
#include<bits/stdc++.h>
using namespace std;
string s;
int n;
int main(){
cin>>n;
while(n--){
cin>>s;
int ans=1;char c=s[0];
int cnt=1;
for(int i=1;i<s.length()-1;i++){
if(s[i]==s[i+1]){
cnt++;
if(cnt>ans){ans=cnt;c=s[i];}
if(cnt==ans&&c>s[i]){ans=cnt;c=s[i];}
}else{
cnt=1;
}
}printf("%c %d\n",c,ans);
}
return 0;
}
文字排版
#include<bits/stdc++.h>
using namespace std;
int n;
string a,b;
int main(){
cin>>n;
while(n--){
cin>>a;
if(b.length()+1+a.length()<79){
if(b.length())b+=" ";
b+=a;
}else
if(b.length()+1+a.length()==79||b.length()+1+a.length()==80){
cout<<b<<" "<<a<<endl;
b=string("");
}else{
cout<<b<<endl;
b=a;
}
}cout<<b<<endl;
return 0;
}
数组逆序重放
#include<bits/stdc++.h>
using namespace std;
int n;
int main(){
cin>>n;
vector<int>v;
for(int i=0;i<n;i++){
int x;cin>>x;
v.push_back(x);
}reverse(v.begin(),v.end());
for(int i=0;i<n;i++)cout<<v[i]<<" ";
return 0;
}
取石子游戏
#include<bits/stdc++.h>
using namespace std;
int a,b;
bool win(int a,int b){
if(b==0)return 1;
if(a/b>=2)return 0;
return !win(b,a-b);
}
int main(){
while(cin>>a>>b){
if(!a&&!b)break;
if(a<b)swap(a,b);
if(!win(a,b))puts("win");
else puts("lose");
}
return 0;
}
八皇后问题
#include<bits/stdc++.h>
using namespace std;
int pos[736]={1,5,8,6,3,7,2,4,1,6,8,3,7,4,2,5,1,7,4,6,8,2,5,3,1,7,5,8,2,4,6,3,2,4,6,8,3,1,7,5,2,5,7,1,3,8,6,4,2,5,7,4,1,8,6,3,2,6,1,7,4,8,3,5,2,6,8,3,1,4,7,5,2,7,3,6,8,5,1,4,2,7,5,8,1,4,6,3,2,8,6,1,3,5,7,4,3,1,7,5,8,2,4,6,3,5,2,8,1,7,4,6,3,5,2,8,6,4,7,1,3,5,7,1,4,2,8,6,3,5,8,4,1,7,2,6,3,6,2,5,8,1,7,4,3,6,2,7,1,4,8,5,3,6,2,7,5,1,8,4,3,6,4,1,8,5,7,2,3,6,4,2,8,5,7,1,3,6,8,1,4,7,5,2,3,6,8,1,5,7,2,4,3,6,8,2,4,1,7,5,3,7,2,8,5,1,4,6,3,7,2,8,6,4,1,5,3,8,4,7,1,6,2,5,4,1,5,8,2,7,3,6,4,1,5,8,6,3,7,2,4,2,5,8,6,1,3,7,4,2,7,3,6,8,1,5,4,2,7,3,6,8,5,1,4,2,7,5,1,8,6,3,4,2,8,5,7,1,3,6,4,2,8,6,1,3,5,7,4,6,1,5,2,8,3,7,4,6,8,2,7,1,3,5,4,6,8,3,1,7,5,2,4,7,1,8,5,2,6,3,4,7,3,8,2,5,1,6,4,7,5,2,6,1,3,8,4,7,5,3,1,6,8,2,4,8,1,3,6,2,7,5,4,8,1,5,7,2,6,3,4,8,5,3,1,7,2,6,5,1,4,6,8,2,7,3,5,1,8,4,2,7,3,6,5,1,8,6,3,7,2,4,5,2,4,6,8,3,1,7,5,2,4,7,3,8,6,1,5,2,6,1,7,4,8,3,5,2,8,1,4,7,3,6,5,3,1,6,8,2,4,7,5,3,1,7,2,8,6,4,5,3,8,4,7,1,6,2,5,7,1,3,8,6,4,2,5,7,1,4,2,8,6,3,5,7,2,4,8,1,3,6,5,7,2,6,3,1,4,8,5,7,2,6,3,1,8,4,5,7,4,1,3,8,6,2,5,8,4,1,3,6,2,7,5,8,4,1,7,2,6,3,6,1,5,2,8,3,7,4,6,2,7,1,3,5,8,4,6,2,7,1,4,8,5,3,6,3,1,7,5,8,2,4,6,3,1,8,4,2,7,5,6,3,1,8,5,2,4,7,6,3,5,7,1,4,2,8,6,3,5,8,1,4,2,7,6,3,7,2,4,8,1,5,6,3,7,2,8,5,1,4,6,3,7,4,1,8,2,5,6,4,1,5,8,2,7,3,6,4,2,8,5,7,1,3,6,4,7,1,3,5,2,8,6,4,7,1,8,2,5,3,6,8,2,4,1,7,5,3,7,1,3,8,6,4,2,5,7,2,4,1,8,5,3,6,7,2,6,3,1,4,8,5,7,3,1,6,8,5,2,4,7,3,8,2,5,1,6,4,7,4,2,5,8,1,3,6,7,4,2,8,6,1,3,5,7,5,3,1,6,8,2,4,8,2,4,1,7,5,3,6,8,2,5,3,1,7,4,6,8,3,1,6,2,5,7,4,8,4,1,3,6,2,7,5};
int main(){
int i,j,n=92;
while(n--){
printf("No. %d\n",92-n);
for(i=0;i<8;i++){
for(j=0;j<8;j++)
if(i==pos[(91-n)*8+j]-1)
printf("1 ");
else printf("0 ");
puts("");
}
}
return 0;
}
回文串判断
#include<bits/stdc++.h>
using namespace std;
int main(){
string s,a;
cin>>s;a=s;
reverse(s.begin(),s.end());
if(s==a)puts("1");else puts("0");
return 0;
}
分解因数
#include<iostream>
#include<cstdio>
using namespace std;
int sum=0;
void recur(int N,int i)
{
if(N==1) sum++;
while(i<=N)
{
if(N%i==0) recur(N/i,i);
i++;
}
return ;
}
int main()
{
//freopen("in.txt","r",stdin);
int T=0;
cin>>T;
while(T--)
{
int N=0;
cin>>N;
int i=2,res=1;
while(i<=N/2)
{
if(N%i==0)
{
sum=0;
recur(N/i,i);
res+=sum;
}
i++;
}
cout<<res<<endl;
}
return 0;
}
走出迷宫
#include<bits/stdc++.h>
using namespace std;
struct node{
int x,y,dep;
};
int vis[111][111];
queue<node>q;
int n,m;
char mp[111][111];
int sx,sy,tx,ty;
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
string s;cin>>s;
for(int j=0;j<s.length();j++){
mp[i][j+1]=s[j];
if(s[j]=='S'){
sx=i,sy=j+1;
}if(s[j]=='T'){
tx=i,ty=j+1;
}
}
}
q.push((node){sx,sy,0});vis[sx][sy]=1;
while(!q.empty()){
node u=q.front();q.pop();
if(u.x==tx&&u.y==ty){
cout<<u.dep<<endl;;
return 0;
}
const int dx[4]={0,0,1,-1};
const int dy[4]={1,-1,0,0};
for(int i=0;i<4;i++){
int x=u.x+dx[i],y=u.y+dy[i];
if(x<1||y<1||x>n||y>m||vis[x][y]||mp[x][y]=='#')continue;
q.push((node){x,y,u.dep+1});
vis[x][y]=1;
}
}
return 0;
}
全排列
#include<bits/stdc++.h>
using namespace std;
string s;
int main(){
cin>>s;
sort(s.begin(),s.end());
do{
cout<<s<<endl;
}while(next_permutation(s.begin(),s.end()));
return 0;
}
流感传染
#include<stdio.h>
#include<string.h>
int main()
{
int n,m,i,j;
char sickman[101][101];
scanf("%d",&n);
memset(sickman,'#',sizeof(sickman));
for(i = 0; i < n; i++)
for(j = 0; j < n; j++)
{
scanf("%c", &sickman[i][j]);
if( '\n' == sickman[i][j] )
--j;
}
scanf("%d",&m);
while(--m > 0)
{
for( i = 0; i < n; i++)
for( j = 0; j < n; j++)
{
if(sickman[i][j] == '@')
{
if( i-1 >= 0 && sickman[i-1][j] == '.')
sickman[i-1][j] = '*';
if( i+1 < n && sickman[i+1][j] == '.')
sickman[i+1][j] = '*';
if( j-1 >= 0 && sickman[i][j-1] == '.')
sickman[i][j-1] = '*';
if( j+1 < n && sickman[i][j+1] == '.')
sickman[i][j+1] = '*';
}
}
for( i = 0; i < n; i++)
for( j = 0; j < n; j++)
if(sickman[i][j] == '*')
sickman[i][j] = '@';
}
int sum = 0;
for( i = 0; i < n; i++)
for( j = 0; j < n; j++)
if(sickman[i][j] == '@')
++sum;
printf("\%d\n",sum);
return 0;
}
布尔表达式
#include <stdio.h>
#include <string.h>
char a[1111] = {0}, s[1111], *p;
int b[1111], c[1111], f[222];
int i, n = 0, m;
int calc(int l, int r){
while (c[l] == r) ++l, --r;
if (l == r) return a[l];
int i, j, p = l;
for (i = l; i <= r; ++i) {
if (f[a[p]] < f[a[i]] || (f[a[p]] == f[a[i]] && a[p] != '!')) p = i;
if (a[i] == '(') i = c[i] - 1;
}
if (a[p] == '!') return !calc(p + 1, r);
i = calc(l, p - 1), j = calc(p + 1, r);
return a[p] == '&' ? i && j : i || j;
}
int main(){
memset(f, 0, sizeof f);
f['!'] = 1, f['&'] = 2, f['|'] = 3;
while (p = gets(s)) {
for (n = 0; *p; ++p)
if (*p == 'F') a[++n] = 0;
else if (*p == 'V') a[++n] = 1;
else if (*p == '!') a[n] == '!' ? --n : a[++n] = '!';
else if (*p != ' ') a[++n] = *p;
memset(c, 0, sizeof c);
for(m = 1, i = 1; i <= n; ++i)
if (a[i] == '(') b[++m] = i;
else if (a[i] == ')') c[i] = b[m], c[b[m--]] = i;
puts(calc(1, n) ? "V" : "F");
}
return 0;
}
汉诺塔问题
#include<bits/stdc++.h>
using namespace std;
void out(int n,char A,char B,char C){
if(n==1){
printf("%c->%d->%c\n",A,n,C);
}else{
out(n-1,A,C,B);
printf("%c->%d->%c\n",A,n,C);
out(n-1,B,A,C);
}
}
int n;char a,b,c;
int main(){
scanf("%d",&n);
a=getchar();
while(!isalpha(a))a=getchar();
b=getchar();
while(!isalpha(b))b=getchar();
c=getchar();
while(!isalpha(c))c=getchar();
out(n,a,c,b);
return 0;
}
输出二进制补码
#include<bits/stdc++.h>
using namespace std;
int a;
int main(){
while(scanf("%d",&a)==1){
string s;
for(int i=0;i<32;i++,a>>=1)
s.push_back((a&1)+'0');
reverse(s.begin(),s.end());
cout<<s<<endl;
}
return 0;
}
扩号匹配问题
#include<bits/stdc++.h>
using namespace std;
string s,ss;
int main(){
while(getline(cin,s)){
ss="";
for(int i=0;i<s.length();i++)ss.push_back(' ');
stack<pair<int,char> >S;
for(int i=0;i<s.length();i++){
if(s[i]!='('&&s[i]!=')'){continue;}
if(S.empty())S.push(make_pair(i,s[i]));
else{
if(S.top().second=='('&&s[i]==')'){
S.pop();
}else{
S.push(make_pair(i,s[i]));
}
}
}
while(!S.empty()){
ss[S.top().first]=S.top().second=='('?'$':'?';
S.pop();
}
cout<<s<<endl;
cout<<ss<<endl;
}
return 0;
}
排队游戏
#include<bits/stdc++.h>
using namespace std;
stack<pair<int,char> >S;
string s;
int size;
pair<int,int>anss[2233];
char boy,girl;
int main(){
cin>>s;
boy=s[0];
for(int i=0;i<s.length();i++)if(s[i]!=boy)girl=s[i];
for(int i=0;i<s.length();i++){
if(S.empty())S.push(make_pair(i,s[i]));
else{
if(S.top().second==boy&&s[i]==girl){
anss[++size]=make_pair(i,S.top().first);
S.pop();
}else S.push(make_pair(i,s[i]));
}
}sort(anss+1,anss+1+size);
for(int i=1;i<=size;i++)
printf("%d %d\n",anss[i].second,anss[i].first);
return 0;
}
多边形游戏
#include<bits/stdc++.h>
using namespace std;
#define add -1
#define mul -2
vector<int>v;
int ans=0;
void deb(vector<int>v){
for(int i=0;i<v.size();i++)
printf("%d%c",v[i]," \n"[i==v.size()-1]);
}
int dfs(int l,int r){
if(l==r)return v[l];
int ans=0;
for(int i=l+1;i<=r;i+=2){
if(v[i]==add){
ans=max(ans,dfs(l,i-1)+dfs(i+1,r));
}else{
ans=max(ans,dfs(l,i-1)*dfs(i+1,r));
}
}return ans;
}
int n;
int main(){
cin>>n;
for(int i=1;i<=n;i++){
int x;char c;
cin>>x;c=getchar();
while(c!='+'&&c!='*')c=getchar();
v.push_back(x);
if(c=='+')v.push_back(add);
else v.push_back(mul);
}int len=v.size();
for(int i=0;i<len;i++)v.push_back(v[i]);
//deb(v);
for(int i=0;i<len;i+=2){
ans=max(ans,dfs(i,i+len-2));
}cout<<ans<<endl;
return 0;
}
放苹果
#include<bits/stdc++.h>
using namespace std;
int c[233][233];
int n,m,T;
int dfs(int n,int m){
if(n==0||m==1)return 1;
if(m>n)return dfs(n,n);
return dfs(n,m-1)+dfs(n-m,m);
}
int main(){
cin>>T;
while(T--){
cin>>n>>m;
cout<<dfs(n,m)<<endl;
}
return 0;
}
逆波兰表达式
#include<bits/stdc++.h>
using namespace std;
double exp(){
char a[10];
scanf("%s",a);
switch(a[0]){
case'+':return exp()+exp();
case'-':return exp()-exp();
case'*':return exp()*exp();
case'/':return exp()/exp();
default:return atof(a);
}
}
int main()
{
double ans;
ans=exp();
printf("%f\n",ans);
return 0;
}
数组逆序重放
#include<bits/stdc++.h>
using namespace std;
int n;
int main(){
cin>>n;
vector<int>v;
for(int i=0;i<n;i++){
int x;cin>>x;
v.push_back(x);
}reverse(v.begin(),v.end());
for(int i=0;i<n;i++)cout<<v[i]<<" ";
return 0;
}
扩号匹配问题
#include<bits/stdc++.h>
using namespace std;
string s,ss;
int main(){
while(getline(cin,s)){
ss="";
for(int i=0;i<s.length();i++)ss.push_back(' ');
stack<pair<int,char> >S;
for(int i=0;i<s.length();i++){
if(s[i]!='('&&s[i]!=')'){continue;}
if(S.empty())S.push(make_pair(i,s[i]));
else{
if(S.top().second=='('&&s[i]==')'){
S.pop();
}else{
S.push(make_pair(i,s[i]));
}
}
}
while(!S.empty()){
ss[S.top().first]=S.top().second=='('?'$':'?';
S.pop();
}
cout<<s<<endl;
cout<<ss<<endl;
}
return 0;
}
角谷猜想
#include<bits/stdc++.h>
using namespace std;
int n;
int main()
{
cin>>n;
if(n==1){
puts("End");
return 0;
}
do{
if(n&1){
printf("%d*3+1=%d\n",n,n*3+1);
n=n*3+1;
}else{
printf("%d/2=%d\n",n,n/2);
n>>=1;
}
}while(n!=1);
puts("End");
return 0;
}
排队游戏
#include<bits/stdc++.h>
using namespace std;
stack<pair<int,char> >S;
string s;
int size;
pair<int,int>anss[2233];
char boy,girl;
int main(){
cin>>s;
boy=s[0];
for(int i=0;i<s.length();i++)if(s[i]!=boy)girl=s[i];
for(int i=0;i<s.length();i++){
if(S.empty())S.push(make_pair(i,s[i]));
else{
if(S.top().second==boy&&s[i]==girl){
anss[++size]=make_pair(i,S.top().first);
S.pop();
}else S.push(make_pair(i,s[i]));
}
}sort(anss+1,anss+1+size);
for(int i=1;i<=size;i++)
printf("%d %d\n",anss[i].second,anss[i].first);
return 0;
}
DNA排序
#include<bits/stdc++.h>
using namespace std;
vector<string>v;
int calc(string s){
int ans=0;
for(int i=0;i<s.length();i++)
for(int j=i+1;j<s.length();j++)
if(s[i]>s[j])ans++;return ans;
}
bool cmp(string a,string b){
return calc(a)<calc(b);
}
int n,m;
int main(){
cin>>m>>n;
for(int i=1;i<=n;i++){
string s;cin>>s;
v.push_back(s);
}stable_sort(v.begin(),v.end(),cmp);
for(int i=0;i<v.size();++i)cout<<v[i]<<endl;
return 0;
}
单词翻转
#include <cstdio>
#include<cstring>
#include<iostream>
using namespace std;
char a[510]; int len;
int main()
{
while(~(a[len++] = getchar())); --len; --len;
int h = 0, t = 0;
while(h < len)
{
t = h;
while(t < len && a[t] != ' ') ++t;
for(int i = t - 1; i >= h; --i) printf("%c", a[i]);
while(a[t] == ' ' && t < len) ++t, putchar(' '); h = t;
}
}
请开发一个自上而下的模块化程序,用于完成以下任务
#include<bits/stdc++.h>
using namespace std;
vector<int>a,b;
int main(){
int n,m;cin>>n>>m;
while(n--){
int x;cin>>x;a.push_back(x);
}sort(a.begin(),a.end());
while(m--){
int x;cin>>x;b.push_back(x);
}sort(b.begin(),b.end());
for(int i=0;i<a.size();i++)cout<<a[i]<<" ";
for(int i=0;i<b.size();i++)cout<<b[i]<<" ";
}
带通配符的字符串匹配
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <algorithm>
#define N 25
using namespace std;
int l1, l2;
char s1[N], s2[N];
bool pipei(int now1, int now2)
{
if (now1 == l1 && now2 < l2) return false;
if (now1 == l1 && now2 == l2) return true;
if (now1 < l1 && now2 == l2)
{
if (s1[now1] != '*') return false;
}
if (s1[now1] == '*')
{
int ans = false;
for (int i = now2; i <= l2; ++i)
ans |= pipei(now1+1, i);
return ans;
}
else if (s1[now1] == '?') return pipei(now1+1, now2+1);
else if (s1[now1] != s2[now2]) return false;
else return pipei(now1+1, now2+1);
}
int main()
{
gets(s1); l1 = strlen(s1);
gets(s2); l2 = strlen(s2);
if (pipei(0, 0)) printf("matched\n");
else printf("not matched\n");
return 0;
}
用二分法求方程的根
#include <stdio.h>
#include <math.h>
#define DEFAULT_UPPER (10)
#define DEFAULT_LOWER (-10)
#define DEFAULT_E (0.00000001)
#define _MID(x,y) ((x+y)/2)
#define _VALUE(x) (2*x*x*x-4*x*x+3*x-6)
double _e;
int getRoot(double lower, double upper, double *result);
main()
{
double root;
scanf("%lf",& _e);
if(_e == 0.0)
_e = DEFAULT_E;
if(getRoot(DEFAULT_LOWER, DEFAULT_UPPER, &root))
printf("%2.8lf\n", root);
else
printf("No Solution.\n");
}
int getRoot(double lower, double upper, double *result)
{
*result = _MID(lower,upper);
if(upper - lower <= _e)
return 1;
if(_VALUE(lower)*_VALUE(*result) <= 0)
return getRoot(lower, *result, result);
else if(_VALUE(*result)*_VALUE(upper) <= 0)
return getRoot(*result, upper, result);
else
return 0;
}
单词替换
#include <stdio.h>
#include <string.h>
#define MAX 100
int main()
{
char str[MAX+2];
char a[MAX+1],b[MAX+1];
char *s=str, *p;
gets(s);
gets(a);
gets(b);
strcat (s," ");
while (*s){
p=strchr(s,' ');
*p='\0';
printf((strcmp(s,a)==0)?b:s);
s=p+1;
if (*s){
printf(" ");
}
}
return 0;
}
字符串排序
#include<bits/stdc++.h>
using namespace std;
vector<string>v;
int T,n;
int main(){
cin>>T;
while(T--){
v.clear();
cin>>n;getchar();
for(int i=0;i<n;i++){
string s;getline(cin,s);v.push_back(s);
}sort(v.begin(),v.end());
for(int i=0;i<n;i++)
cout<<v[i]<<endl;
//if(T-1)
cout<<endl;
}
return 0;
}
统计字符数
#include<bits/stdc++.h>
using namespace std;
int n;
string s;
int a[26];
int main(){
cin>>n;
for(int i=0;i<n;i++){
cin>>s;memset(a,0,sizeof a);
for(int j=0;j<s.length();j++)a[s[j]-'a']++;
int tmp=*max_element(a,a+26);
for(int i=0;i<26;i++){
if(a[i]==tmp){
printf("%c %d\n",i+'a',a[i]);
break;
}
}
}
return 0;
}
单词倒排
#include<bits/stdc++.h>
using namespace std;
vector<string>v;
int main(){
string s;
while(cin>>s){
v.push_back(s);
}reverse(v.begin(),v.end());
for(int i=0;i<v.size();i++)cout<<v[i]<<" ";
return 0;
}
过滤多余的空格
#include<bits/stdc++.h>
using namespace std;
vector<string>v;
int main(){
char c;int ok=0;
while(~(c=getchar())){
if(c==' '&&!ok){
putchar(' ');ok=1;
}else if(c!=' '){
putchar(c);ok=0;
}
}
return 0;
}
最长单词2
#include<bits/stdc++.h>
using namespace std;
vector<string>v;
int main(){
string s,ans;
while(cin>>s){
if(s[s.size()-1]=='.')s.erase(s.length()-1,1);
if(s.length()>ans.length())ans=s;
}cout<<ans<<endl;
return 0;
}
单词排序
#include<bits/stdc++.h>
using namespace std;
vector<string>v;
int main(){
string s;
while(cin>>s)v.push_back(s);
sort(v.begin(),v.end());
vector<string>::iterator ed=unique(v.begin(),v.end());
for(vector<string>::iterator it=v.begin();it!=ed;it++)
cout<<*it<<endl;
return 0;
}
字符串最大跨距
#include<stdio.h>
#include<string.h>
void strSwap(char a[],int len);//翻转字符串数组
int main()
{
char s[330],s1[12],s2[12];
int i,j,flag;
int lenS,lenS1,lenS2;
int left,right,res=-1;
char *L,*R;
scanf("%s",s);
flag=0;
for(i=0,j=0;s[i]!='\0';i++)
{
if(s[i]==',')
{
if(flag==0)
{
flag=1;
s[i]='\0';
}
else if(flag==1)
{
flag=2;
s1[j]='\0';
j=0;
}
}
else if(flag==1)
{
s1[j]=s[i];
j++;
}
else if(flag==2)
{
s2[j]=s[i];
j++;
}
}
s2[j]='\0';
lenS=strlen(s);
lenS1=strlen(s1);
lenS2=strlen(s2);
//printf("%d %s\n%d %s\n%d %s\n",lenS,s,lenS1,s1,lenS2,s2);
L=strstr(s,s1);
left=L-s+lenS1-1;//s1字符串最末一个字符在S当中的下标
/*printf("%d\n",left);*/
strSwap(s,lenS);
strSwap(s2,lenS2);
R=strstr(s,s2);
right=R-s+lenS2-1;//S和S2字符串翻转情况下,s2的最末一个字符在S当中的下标
right=lenS-right-1;//S和S2字符串正常情况下,s2的最初一个字符在S当中的下标。等同于:S和S2字符串翻转情况下,S除去S2后剩余的字符个数。
if(left>right)
printf("-1\n");
else printf("%d\n",right-1-left);//right-1-left是s1和s2之间的字符个数
return 0;
}
void strSwap(char a[],int len)//翻转字符串数组
{
int i,j=len-1;
char t;
len=len/2;
for(i=0;i<len;i++,j--)
{
t=a[i];
a[i]=a[j];
a[j]=t;
}
}
奇数单增序列
#include<bits/stdc++.h>
using namespace std;
vector<int>v;
int main(){
int n;cin>>n;
while(n--){
int x;cin>>x;
if(x&1)
v.push_back(x);
}sort(v.begin(),v.end());
for(int i=0;i<v.size();i++)
cout<<v[i]<<",\n"[i==v.size()-1];
return 0;
}
找最大数序列
#include<stdio.h>
int main()
{
int n,i,a[31];
int max=-1,t,len=0;
char ch;
int first;
scanf("%d",&n);
getchar();
for(i=0;i<n;i++)
{
scanf("%d%c",&t,&ch);
while(ch==',')
{
if(t>max)//发现新的最大值
{
max=t;//记录最大值
len=0;//发现新的最大值,要重置数组下标
a[len]=i;//记录最大值的行号
}
else if(max==t)
{
if(i!=a[len])//确保同一行里面相同大小的最大数多次出现也只记录一次行号
{
len++;//下标前移一个单位
a[len]=i;//记录最大值的行号
}
}
ch=' ';//清空ch的值
scanf("%d%c",&t,&ch);
}/**/
if(t>max)
{
max=t;
len=0;
a[len]=i;
}
else if(max==t)
{
if(i!=a[len])
{
len++;
a[len]=i;
}
}
}
printf("%d\n",max);
first=1;
for(i=0;i<=len;i++)
{//输出行号时注意:题目要求行号从1开始计算。
if(first)
{
printf("%d",a[i]+1);
first=0;
}
else printf(",%d",a[i]+1);
}
printf("\n");
return 0;
}
校门外的树
#include<bits/stdc++.h>
using namespace std;
int a[23333],n,m;
int main(){
cin>>n>>m;int ans=0;
for(int i=0;i<=n;i++)a[i]=1;
while(m--){
int l,r;cin>>l>>r;
for(int i=l;i<=r;i++)a[i]=0;
}for(int i=0;i<=n;i++)ans+=a[i];
cout<<ans<<endl;
return 0;
}
距离排序
#include<iostream>
#include<cmath>
#include <iomanip>
#include<cstdio>
using namespace std;
struct dian
{
int xx,yy,zz;
};
struct juLi
{
dian a,b;
double len;
};
int main()
{
struct dian A[12];
struct juLi B[50],TEMP;
int n,i,j,t;
int flag;
cin>>n;
for(i=0;i<n;i++)
{
cin>>A[i].xx>>A[i].yy>>A[i].zz;
}
t=0;
for(i=0;i<n-1;i++)
{
for(j=i+1;j<n;j++)
{
B[t].a=A[i];
B[t].b=A[j];
B[t].len=sqrt((B[t].a.xx-B[t].b.xx)*(B[t].a.xx-B[t].b.xx)+
(B[t].a.yy-B[t].b.yy)*(B[t].a.yy-B[t].b.yy)+
(B[t].a.zz-B[t].b.zz)*(B[t].a.zz-B[t].b.zz));
t++;
}
}
for(i=1;i<t;i++)
{
flag=1;
for(j=0;j<t-i;j++)
{
if(B[j].len<B[j+1].len)
{
flag=0;
TEMP=B[j];
B[j]=B[j+1];
B[j+1]=TEMP;
}
}
if(flag) break; //if(flag==1) break;
}
for(i=0;i<t;i++)
{
cout<<'('<<B[i].a.xx<<','<<B[i].a.yy<<','<<B[i].a.zz<<')';
cout<<'-';
cout<<'('<<B[i].b.xx<<','<<B[i].b.yy<<','<<B[i].b.zz<<')';
cout<<'=';
cout<<setiosflags(ios::fixed)<<setprecision(2)<<B[i].len<<endl;
}
return 0;
}
错误探测
#include<cstdio>
#define N_MAX 100
int main(){
int n,a[N_MAX][N_MAX];
int i,j;
int x,y,sum,row,col;
scanf("%d",&n);
while(n){
x = y = -1;
row = col = 0;
if(n==1){
scanf("%d",&x);
if(x==0){
printf("OK\n");
}else{
printf("Change bit (1,1)\n");
}
scanf("%d",&n);
continue;
}
for(i=0;i<n;i++){
sum = 0;
for(j=0;j<n;j++){
scanf("%d",&a[i][j]);
sum += a[i][j];
}
if(sum%2){
row ++;
if(x==-1) x = i;
}
}
for(j=0;j<n;j++){
sum = 0;
for(i=0;i<n;i++){
sum += a[i][j];
}
if(sum%2){
col ++;
if(y==-1) y = j;
}
}
if(row==0 && col==0){
printf("OK\n");
}else if(row==1 && col==1){
printf("Change bit (%d,%d)\n",x+1,y+1);
}else{
printf("Corrupt\n");
}
scanf("%d",&n);
}
return 0;
}
计算鞍点
#include<cstdio>
#define maxN 50
#define maxM 50
int main()
{
int n,m,i,j,k;
int a[maxN][maxM]={0};
int max,x,y;
int flag;
n=5;
m=5;
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
scanf("%d",&a[i][j]);
}
}
for(i=0;i<n;i++)
{
max=a[i][0];//???????????????
x=i;//????????????
y=0;
for(j=1;j<m;j++)//???????
{
if(a[i][j]>max)
{
max=a[i][j];
y=j;
}
}
flag=1;
for(k=0;k<n;k++)//??????????max????????y?????
{
if(a[k][y]<max)
{
flag=0;//flag?0??max???y?????
break;
}
}
if(flag==1)//flag?1??max??y?????,??????,?????
{
printf("%d %d %d\n",x+1,y+1,max);
break;//????????,??????????????
}
}
if(flag==0)//?????????,???????????
printf("not found\n");
return 0;
}
求序列中的众数
#include<bits/stdc++.h>
using namespace std;
map<string,int>M;
string read(){
string s1="";
bool flag(0);
char c=0;
for(;c<'0'||c>'9';c=getchar())if(c=='-')flag=1;
while(c=='0')c=getchar();
for(;c>='0'&&c<='9';c=getchar())s1+=c;
if(s1=="")s1="0";
else if(flag)s1='-'+s1;
return s1;
}
string ans;
int n;
vector<string>v;
int main(){
cin>>n;
if(n==0)while(1);
for(int i=1;i<=n;i++){
string s=read();
// cout<<s<<endl;
v.push_back(s);
M[s]++;
}
int tmp=0;for(map<string,int>::iterator it=M.begin();it!=M.end();it++)tmp=max(tmp,it->second);
for(int i=0;i<v.size();i++){
if(M[v[i]]==tmp){
ans=v[i];break;
}
}
if(M.size()<=1)puts("no");else cout<<ans<<endl;
return 0;
}
矩阵归零消减序列和
#include<stdio.h>
int main()
{
int a[100][100],i,j,k,n;
int rowMin,colMin;
int x;
int sum;
scanf("%d",&n);
for(k=0;k<n;k++)
{
//输入二维数组
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
scanf("%d",&a[i][j]);
}
}
sum=0;
//归零和消减,整个操作有n-1次,每次进行时数组的阶是x
for(x=n;x>1;x--)
{
//行的归零
for(i=0;i<x;i++)
{
rowMin=a[i][0];
for(j=1;j<x&&rowMin>0;j++)
{
if(a[i][j]<rowMin)
{
rowMin=a[i][j];
}
}
if(rowMin!=0)
{
for(j=0;j<x;j++)
{
a[i][j]=a[i][j]-rowMin;
}
}
}
//列的归零
for(j=0;j<x;j++)
{
colMin=a[0][j];
for(i=1;i<x&&colMin>0;i++)
{
if(a[i][j]<colMin)
{
colMin=a[i][j];
}
}
if(colMin!=0)
{
for(i=0;i<x;i++)
{
a[i][j]=a[i][j]-colMin;
}
}
}
sum=sum+a[1][1];
//下面是消减
i=0;
for(j=2;j<x;j++)
a[i][j-1]=a[i][j];
j=0;
for(i=2;i<x;i++)
a[i-1][j]=a[i][j];
for(i=2;i<x;i++)
{
for(j=2;j<x;j++)
{
a[i-1][j-1]=a[i][j];
}
}
}
printf("%d\n",sum);
}
return 0;
}
找和为K的两个元素
#include<iostream>
using namespace std;
int main()
{
int n,k,i;
cin>>n>>k;
int a[1000];//???????????
for(i=0;i<n;i++)
{
cin>>a[i];
}
int j=0;
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
if(k==a[i]+a[j])
{
cout<<"yes"<<endl;
return 0;
}
}
}
cout<<"no"<<endl;
}
求满足条件的3位数
#include<bits/stdc++.h>
using namespace std;
bool can(int x){
int ok=0;
for(int i=1;i*i<=x;i++)if(i*i==x)ok=1;
if(!ok)return false;
ok=0;
if(x%10==x/10%10)ok=1;
if(x%10==x/100)ok=1;
if(x/10%10==x/100)ok=1;
return ok;
}
int main(){
int n;cin>>n;
int s=0;
for(int i=100;i<=999;i++){
if(can(i)){
s++;
if(s==n){
cout<<i<<endl;
return 0;
}
}
}
return 0;
}
简单算术表达式求值
#include<bits/stdc++.h>
using namespace std;
int main()
{
int a,b;
char op;
a=getchar()-'0';
a=a*10+getchar()-'0';
op=getchar();while(op==' ')op=getchar();
char c=getchar();while(c==' ')c=getchar();
b=c-'0';
b=b*10+getchar()-'0';
if(op=='+')cout<<a+b<<endl;
if(op=='-')cout<<a-b<<endl;
if(op=='*')cout<<a*b<<endl;
if(op=='/')cout<<a/b<<endl;
if(op=='%')cout<<a%b<<endl;
return 0;
}
完美立方
#include<stdio.h>
int main()
{
int a,b,c,d;
int n;
scanf("%d",&n);
for(a=2;a<=n;a++){
for(b=2;b<a;b++){
for(c=b;c<a;c++){
for(d=c;d<a;d++){
if(a*a*a==b*b*b+c*c*c+d*d*d)
printf("Cube = %d, Triple = (%d,%d,%d)\n",a,b,c,d);
}
}
}
}
return 0;
}
求特殊自然数
#include<bits/stdc++.h>
using namespace std;
int main()
{
int x;cin>>x;
if(x==1)puts("248");
if(x==2)puts("503");
if(x==3)puts("305");
return 0;
}
称体重
#include<iostream>
using namespace std;
void sort(int a,int b,int c,int d)
{
int result[4]={a,b,c,d};
char name[4]={'z','q','s','l'};
int temp;
char tempname;
for(int i=0;i<4;i++)
{
for(int j=i;j<4;j++)
{
if(result[i]<result[j])
{
temp=result[i];
result[i]=result[j];
result[j]=temp;
tempname=name[i];
name[i]=name[j];
name[j]=tempname;
}
}
}
for(int i=0;i<4;i++)
{
cout<<name[i]<<" "<<result[i]<<endl;
}
}
int main()
{
int z,q,s,l;
for(z=1;z<=5;z++)
{
for(q=1;q<=5;q++)
{
for(s=1;s<=5;s++)
{
for(l=1;l<=5;l++)
{
if(z+q==s+l&&z+l>s+q&&z+s<q&&z!=q!=s!=l)
{
sort(z,q,s,l);
}
}
}
}
}
return 0;
}
比饭量
#include<cstdio>
using namespace std;
int main()
{
puts("BCA");
}
最长平台
#include<bits/stdc++.h>
using namespace std;
int a[2333];
int n;
int main(){
while(cin>>n){
if(!n)break;
memset(a,0,sizeof a);
for(int i=1;i<=n;i++)cin>>a[i];
int ans=0,res=1;
for(int i=1;i<=n;i++)if(a[i]==a[i+1])ans=max(ans,++res);else res=1;
cout<<ans<<endl;
}
return 0;
}
鸡尾酒疗法
#include <cstdio>
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
int main()
{
int n;
double a, b;
scanf("%d", &n);
scanf("%lf %lf", &a, &b);
for (int i = 1;i < n; ++i)
{
double c, d;
scanf("%lf %lf", &c, &d);
double x, y;
x = b / a;
y = d / c;
if (y - x > 0.05)
puts("better");
else
if (x - y > 0.05)
puts("worse");
else
puts("same");
}
}
求出e的值
#include <cstdio>
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
int main()
{
double n;
scanf("%lf", &n);
double jc(1.00), res(1.00);
for (double i = 1;i <= n; ++i)
{
jc *= i;
res += double(1) / jc;
}
printf("%.10lf", res);
}
球弹跳高度的计算
#include <cstdio>
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
int main()
{
double n;
scanf("%lf", &n);
double res(0), h = n;
res = n;
for (int i = 1;i < 10; ++i)
res += n, n /= 2.00;
for (int i = 1;i <= 10; ++i)
h /= 2.00;
cout<<res<<endl<<h;
}
求分数序列和
#include <cstdio>
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
int main()
{
double n, res(0);
scanf("%lf", &n);
double a, b, c, d, e, f;
a = 1.00, b = 1.00, c = a + b;
d = 0.00, e = 1.00, f = d + e;
for (int i = 1;i <= n; ++i)
{
res += c/f;
a = b, b = c, c = a + b;
d = e, e = f, f = d + e;
}
printf("%.4lf", res);
}
第二个重复出现的数
#include <cstdio>
using namespace std;
int a[1000];
int main()
{
int T;
scanf("%d", &T);
while (T--)
{
int n, i, j, x(-1), y(-1);
scanf("%d", &n);
for (i = 1;i <= n; ++i)
scanf("%d", &a[i]);
for (i = 1;i <= n; ++i)
{
if (x == -1)
{
for (j = i + 1;j <= n && x == -1; ++j)
if (a[j] == a[i])
x = a[i];
}
else
if (y == -1)
{
if (a[i] != x)
{
for (j = i + 1;j <= n && y == -1; ++j)
if (a[j] == a[i])
y = a[i];
}
}
}
if (y == -1)
puts("NOT EXIST");
else
printf("%d\n", y);
}
}
角谷猜想
#include <cstdio>
using namespace std;
int main()
{
int n;
scanf("%d", &n);
while (n != 1)
{
if (n % 2)
{
printf("%d*3+1=%d\n", n, n*3+1);
n = n * 3 + 1;
}
else
{
printf("%d/2=%d\n", n, n/2);
n /= 2;
}
}
puts("End");
}
分数求和
#include <cstdio>
using namespace std;
int n, a[100000], b[100000], m(1), z, i, list[1000000], size, is[1000000];
char c;
inline int max(int a, int b)
{
return a > b ? a : b;
}
inline void read(int &x)
{
for (c = getchar();c > '9' || c < '0';c = getchar());
for (x = 0;c >= '0' && c <= '9';c = getchar())
x = (x << 3) + (x << 1) + c - '0';
}
inline void get(int n)
{
is[1] = 1;
for (int i = 2;i <= n; ++i)
{
if (!is[i])
{
list[++size] = i;
}
for (int j = 1;j <= size && i * list[j] <= n; ++j)
{
is[i * list[j]] = 1;
if (i % list[j] == 0)
break;
}
}
}
int main()
{
scanf("%d", &n);
get(n);
for (i = 1;i <= n; ++i)
{
read(a[i]);
read(b[i]);
m *= b[i];
}
for (i = 1;i <= n; ++i)
z += a[i] * (m / b[i]);
get(max(z, m));
for (i = 1;i <= size; ++i)
{
while (z % list[i] == 0 && m % list[i] == 0)
z /= list[i], m /= list[i];
}
if (z % m == 0)
printf("%d", z/m);
else
printf("%d/%d", z, m);
}
人民币支付
#include <cstdio>
using namespace std;
int main()
{
int n, a, b, c, d, e, f;
scanf("%d", &n);
for (a = 0;n >= 100; ++a)
n -= 100;
for (b = 0;n >= 50; ++b)
n -= 50;
for (c = 0;n >= 20; ++c)
n -= 20;
for (d = 0;n >= 10; ++d)
n -= 10;
for (e = 0;n >= 5; ++e)
n -= 5;
f = n;
printf("%d\n%d\n%d\n%d\n%d\n%d", a, b, c, d, e, f);
}
年龄与疾病
#include <cstdio>
using namespace std;
int main()
{
double n, a(0), b(0), c(0), d(0);
scanf("%lf", &n);
for (double i = 1;i <= n; ++i)
{
int x;
scanf("%d", &x);
if (x >= 1 && x <= 18)
a++;
if (x >= 19 && x <= 35)
b++;
if (x >= 36 && x <= 60)
c++;
if (x >= 61)
d++;
}
printf("1-18: %.2lf%\n", a * double(100) / n);
printf("19-35: %.2lf%\n", b * double(100) / n);
printf("36-60: %.2lf%\n", c * double(100) / n);
printf("60-: %.2lf%\n", d * double(100) / n);
}
短信计费
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
int n, cnt;
int main()
{
scanf("%d", &n);
while (n--)
{
int x;
scanf("%d", &x);
while (x > 0)
cnt++, x -= 70;
}
printf("%.1lf", double(cnt) * 0.1);
}
奥运奖牌计数
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
int n, cnt, a, b, c;
int main()
{
scanf("%d", &n);
while (n--)
{
int x, y, z;
scanf("%d %d %d", &x, &y, &z);
a += x, b += y, c += z;
cnt += x + y + z;
}
printf("%d %d %d %d", a, b, c, cnt);
}
整数的个数
#include <cstdio>
using namespace std;
int n, a, b, c;
int main()
{
scanf("%d", &n);
for (int i = 1;i <= n; ++i)
{
int x;
scanf("%d", &x);
if (x == 1)
a++;
if (x == 5)
b++;
if (x == 10)
c++;
}
printf("%d\n%d\n%d\n", a, b, c);
}
细菌的战争
#include <cstdio>
#include <iostream>
#include <cstring>
#include <algorithm>
#include <set>
#include <queue>
using namespace std;
#define N
#define M
int main()
{
int n;
int a, b;
scanf("%d", &n);
while (n--)
{
int i(0);
scanf("%d %d", &a, &b);
while (a > 0)
{
i++;
a -= b;
a *= 2;
b += b / 20;
while (a > 1000000)
a = 1000000;
}
printf("%d\n", i);
}
}
能被3,5,7整除的数
#include <cstdio>
#include <iostream>
#include <cstring>
#include <algorithm>
#include <set>
#include <queue>
using namespace std;
#define N
#define M
int main()
{
int n;
while (scanf("%d", &n) != EOF)
{
int ok(0);
if (n % 3 == 0)
printf("3 "), ok++;
if (n % 5 == 0)
printf("5 "), ok++;
if (n % 7 == 0)
printf("7 "), ok++;
if (!ok)
puts("n");
else
puts("");
}
}
谁考了第k名
#include <cstdio>
#include <iostream>
#include <cstring>
#include <algorithm>
#include <set>
#include <queue>
using namespace std;
#define N
#define M
struct a
{
double x, y;
}q[101];
inline bool cmp(a A, a B)
{
return A.y > B.y;
}
int main()
{
int n, k;
while (scanf("%d %d", &n, &k) != EOF)
{
for (int i = 1;i <= n; ++i)
scanf("%lf %lf", &q[i].x, &q[i].y);
sort(q+1, q+1+n, cmp);
printf("%.0lf %g\n", q[k].x, q[k].y);
}
}
求平均年龄
#include <cstdio>
using namespace std;
double x, y;
int n;
int main()
{
scanf("%d", &n);
for (int i = 0;i < n; ++i)
{
scanf("%lf", &x);
y += x;
}
y /= double(n);
printf("%.2lf\n", y);
}
计算三角形面积
#include <cstdio>
#include <cmath>
using namespace std;
double a, b, c, p, S, x1, x2, x3, Y1, y2, y3;
double dis(double x1, double Y1, double x2, double y2)
{
return (sqrt((x1-x2)*(x1-x2) + (Y1-y2)*(Y1-y2)));
}
int main()
{
scanf("%lf %lf %lf %lf %lf %lf", &x1, &Y1, &x2, &y2, &x3, &y3);
a = dis(x1, Y1, x2, y2);
b = dis(x1, Y1, x3, y3);
c = dis(x3, y3, x2, y2);
p = (a + b + c) / 2.00;
printf("%.2lf", S = sqrt(p*(p-a)*(p-b)*(p-c)));
}
计算书费
#include <cstdio>
using namespace std;
double a, b, c, d, e, f, g, h, i, j;
int n;
int main()
{
scanf("%d", &n);
while (n--)
{
scanf("%lf %lf %lf %lf %lf %lf %lf %lf %lf %lf", &a, &b, &c, &d, &e, &f, &g, &h, &i, &j);
printf("%.2lf\n", 28.9 * a + 32.7 * b + 45.6 * c + 78.0 * d + 35.0 * e + 86.2 * f + 27.8 * g + 43.0 * h + 56.0 * i + 65.0 * j);
}
}
骑车与走路
#include <cstdio>
using namespace std;
int n, a, b, c;
int main()
{
scanf("%d", &n);
while (n--)
{
scanf("%d", &a);
b = 27 + 23;
if (double(b) + double(a) / 3.0 < double(a) / 1.2)
printf("Bike\n");
if (double(b) + double(a) / 3.0 > double(a) / 1.2)
printf("Walk\n");
if (double(b) + double(a) / 3.0 == double(a) / 1.2)
printf("All\n");
}
}
点和正方形的关系
#include <cstdio>
using namespace std;
int n, a, b, c;
int main()
{
while (scanf("%d %d", &a, &b) != EOF)
{
if (a >= -1 && a <= 1 && b >= -1 && b <= 1)
printf("yes\n");
else
printf("no\n");
}
}
整数的个数
#include <cstdio>
using namespace std;
int n, a, b, c;
int main()
{
scanf("%d", &n);
for (int i = 1;i <= n; ++i)
{
int x;
scanf("%d", &x);
if (x == 1)
a++;
if (x == 5)
b++;
if (x == 10)
c++;
}
printf("%d\n%d\n%d\n", a, b, c);
}
1的个数
#include <cstdio>
using namespace std;
int n, a, b, c;
int main()
{
scanf("%d", &n);
for (int i = 1;i <= n; ++i)
{
int x, cnt(0);
scanf("%d", &x);
while (x)
{
if (x & 1)
cnt++;
x >>= 1;
}
printf("%d\n", cnt);
}
}
大象喝水
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
const double pai = 3.14159;
double h, r, V;
int main()
{
scanf("%lf %lf", &h, &r);
h /= 10, r /= 10;
V = pai * r * r * h;
int i;
for (i = 1;i * V <= 20.0; ++i);
if ((i-1) * V == 20.0)
printf("%d", i-1);
else
printf("%d", i);
}
苹果和虫子
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
int n, x, y;
int main()
{
scanf("%d %d %d", &n, &x, &y);
if (y % x == 0)
printf("%d", max(0, n - y / x));
else
printf("%d", max(0, n- y / x - 1));
}
晶晶赴约会
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
int n;
int main()
{
scanf("%d", &n);
if (n == 1 || n == 3 || n== 5)
printf("NO");
else
printf("YES");
}
求一元二次方程的根
#include<stdio.h>
#include<math.h>
void print(double x)
{
if(x<1e-5 && x>-1e-5)
printf("0.00000");
else
printf("%.5f",x);
}
void f()
{
double a,b,c;
double delta,ans;
scanf("%lf%lf%lf",&a,&b,&c);
delta=b*b-4*a*c;
if(delta<1e-5 && delta>-1e-5)
{
ans=-b;
ans/=2;
ans/=a;
printf("x1=x2=");
print((-b)/(2*a));
printf("\n");
return;
}
if(delta>1e-5)
{
delta=sqrt(delta);
printf("x1=");
print((-b+delta)/(a*2));
printf(";x2=");
print((-b-delta)/(a*2));
printf("\n");
return;
}
delta=sqrt(-delta);
delta/=2*a;
ans=(-b)/(2*a);
printf("x1=");
print(ans);
printf("+");
print(delta);
printf("i;x2=");
print(ans);
printf("-");
print(delta);
printf("i\n");
}
int main()
{
int n,i,s;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
f();
}
return 0;
}
鸡兔同笼
#include <cstdio>
using namespace std;
int n, m;
int main()
{
scanf("%d", &n);
while (n--)
{
scanf("%d", &m);
if (m % 2 == 1)
printf("0 0\n");
else
printf("%d %d\n", (m / 4) + (m % 4) / 2, m / 2);
}
}
判断闰年
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
int n;
int main()
{
scanf("%d", &n);
if((n % 4 == 0 && n % 100 != 0) || n % 400 == 0)
printf("Y");
else
printf("N");
}
奇数求和
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
int n, m, ans;
int main()
{
scanf("%d %d", &m, &n);
if (m % 2 == 0)
m++;
for (int i = m;i <= n;i += 2)
ans += i;
printf("%d\n", ans);
}
与7无关的数
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
int n, ans;
bool fj(int x)
{
while (x)
{
int j = x % 10;
x /= 10;
if (j == 7)
return 1;
}
return 0;
}
int main()
{
scanf("%d", &n);
for (int i = 1;i <= n; ++i)
{
if (i % 7 == 0)
continue;
if (fj(i))
continue;
ans += i * i;
}
printf("%d\n", ans);
}