雞兔同籠問題
注意填物,腳不是4的倍數(shù)的時候最少的動物數(shù),其實就是(N-2)/4+1淑仆,只不過這里整形截斷了小數(shù)部分..
#include "stdio.h"
int main()
{
int nCases,nFeet ,i;
scanf("%d",&nCases);
for(i=0; i<nCases;i++){
scanf("%d", &nFeet);
if(nFeet%2 !=0)
printf("0 0\n");
else if(nFeet%4 != 0)
printf("%d %d\n",nFeet/4+1,nFeet/2);
else
printf("%d %d\n",nFeet/4,nFeet/2);
}
return 0;
}
棋盤距離問題
注意不要忽略后的x==0 和y==0的情況
#include "stdio.h"
#include "math.h"
int main()
{
int nCase;
scanf("%d",&nCase);
char begin[20][2],end[20][2];
for(int i=0;i<nCase;i++)
{
scanf("%s%s",&begin[i],&end[i]);
}
for(i=0; i<nCase;i++)
{
int x,y;
x = abs(begin[i][0]-end[i][0]);//字母
y = abs(begin[i][1]-end[i][1]);//數(shù)字
if(x==0 && y==0) printf("0 0 0 0\n");
else
{
if(x<y) printf("%d",y);//王
else printf("%d",x);
if(x==y || x==0 || y==0) printf(" 1");//后
else printf(" 2");
if(x==0 || y==0) printf(" 1");//車
else printf(" 2");
if(abs(x-y)%2 !=0) printf(" Inf\n");//象
else if(x==y) printf(" 1\n");
else printf(" 2\n");
}
}
return 0;
}
校門外的樹
主要的問題是怎么存儲如果開一個數(shù)組浆熔,實在是太大摆碉,而且不能根據(jù)L來調(diào)整數(shù)組大小,浪費空間畏吓。用vector<bool>來存flag值比較節(jié)省空間培慌。注意一個反省算法的用法count..
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
int L,M,start,end,m,i;
cin>>L>>M;
vector<bool> tree(L+1,true);
for (m=0;m<M;m++) {
cin>>start>>end;
for(i=start;i<=end;i++)
tree[i]=false;
}
cout<<count(tree.begin(),tree.end(),true)<<endl;
return 0;
}
確定進制問題
1.需要注意字符串轉(zhuǎn)十進制數(shù)的方法ret = ret*b + x[i]-'0';
2.注意如果在2-16數(shù)制中如數(shù)字超過進制,返回-1篇裁,提前跳出當前循環(huán)...
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
long b2ten(string x,int b)
{
long ret = 0;
for(int i=0;i<x.length();i++)
{
if(x[i]-'0'>=b) return -1;
ret = ret*b + x[i]-'0';
}
return ret;
}
int main()
{
int n,b;
string p,q,r;
long pAgr,qAgr,rAgr;
cin>>n;
while(n--)
{
cin>>p>>q>>r;
for(b=2;b<=16;b++)
{
pAgr = b2ten(p,b);
qAgr = b2ten(q,b);
rAgr = b2ten(r,b);
if(pAgr == -1 || qAgr == -1 || rAgr == -1) continue;
if(pAgr * qAgr == rAgr){
cout<<b<<endl;
break;
}
}
}
if(b == 17) cout<<"0"<<endl;
return 0;
}
skew數(shù)的問題
挺簡單沛慢,就是一個數(shù)制轉(zhuǎn)換的問題,要把每一個base的基計算出來达布,要注意base和字符串的對應(yīng)關(guān)系..
#include <iostream>
#include <string>
using namespace std;
int main()
{
int base[31],sum,k;
string skew;
base[0] = 1;
for(int i=1; i<31; i++) base[i]=2*base[i-1]+1;
while(1)
{
cin>>skew;
if(skew == "0")
break;
sum = 0;
k = skew.length();
for(i=0;i<skew.length();i++)
{
k--;
sum += (skew[i]-'0')*base[k];
}
cout<<sum<<endl;
}
return 0;
}