【北大先修课】【先修课Code打包】

给水题打个包……

链接: 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);
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值