这里贴上了我自己当时练习杭电oj时的代码和解题思路,必要的题目我会详细的写明需要注意的问题和每一步我的想法
这道题只要注意EOF的用法就可以了,因为程序中并没有说明有多少数据,EOF可以帮助我们判断是否已经到了末尾。
#include
int main(){
int a = 0,b = 0;
while(scanf("%d%d",&a,&b)!=EOF)//只要注意这种写法就可以了,在oj里面很常用
printf("%d\n",a+b);
return 0;
}
#include
int main(){
int a = 0,b = 0;
while(scanf("%d%d",&a,&b)!=EOF){
printf("%d\n",a+b);
}
return 0;
}
#include
int main(){
int N;
scanf("%d",&N);
int a,b;
while(N--){
scanf("%d%d",&a,&b);
printf("%d\n",a+b);
}
return 0;
}
#include
int main(){
int a = 0,b = 0;
while(scanf("%d%d",&a,&b)!=EOF && ((a != 0)||(b != 0))){
printf("%d\n",a+b);
}
return 0;
}
#include
int main(){
int n = 0,a = 0,sum = 0;
while(scanf("%d",&n) != EOF&&(n!=0)){
sum = 0;
while(n--){
scanf("%d",&a);
sum += a;
}
printf("%d\n",sum);
}
return 0;
}
#include
int main(){
int N = 0;
int n = 0;
int a = 0;
int sum = 0;
scanf("%d",&N);
while(N--){
scanf("%d",&n);
sum = 0;
while(n--){
scanf("%d",&a);
sum+=a;
}
printf("%d\n",sum);
}
return 0;
}
#include
int main(){
int n = 0;
int a = 0;
int sum = 0;
while(scanf("%d",&n)!=EOF){
sum = 0;
while(n--){
scanf("%d",&a);
sum+=a;
}
printf("%d\n",sum);
}
return 0;
}
#include
int main(){
int a = 0,b = 0;
while(scanf("%d%d",&a,&b)!=EOF){
printf("%d\n\n",a+b);
}
return 0;
}
#include
int main(){
int N = 0,M = 0;
int a = 0,sum = 0;
scanf("%d",&N);
while(N--){
scanf("%d",&M);
sum = 0;
while(M--){
scanf("%d",&a);
sum += a;
}
if(N!=0){//如果不是最后一组数据就输出带一个空行的结果
printf("%d\n\n",sum);
}else{//是最后一组数据单输出结果即可
printf("%d\n",sum);
}
}
return 0;
}
这个题稍微需要动一下脑子,题目本来的意思是每输入一个数,输出当前已经输入的所有数据的和,我说的动一下脑子指的是如果你有追求效率的心的话,没有那就别管了,我当时做法是避免二重循环效率低,所以打算采用 sum = n * (n + 1) / 2来做,但是很不幸,溢出了,题目只保证了结果会是int类型范围内,但是中间数据可不保证所以你可以采用下面这种做法,也可以换一个思路 sum = n / 2 * (n + 1) 这样就可以了
# include
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
int sum=0;
for(int i=0;i<=n;i++)
{
sum+=i;
}
printf("%d\n\n",sum);
}
return 0;
}
#include
#include
int main(){
char a,b,c;
while(scanf("%c %c %c",&a,&b,&c)!=EOF){
getchar();//接收换行,不然下一次的数据可能会有问题
char t;
if(a>b){
t=a;a=b;b=t;
}
if(a>c){
t=a;a=c;c=t;
}
if(b>c){
t=b;b=c;c=t;
}
printf("%c %c %c\n",a,b,c);
}
}
#include
#include //为了使用开根函数
int main(){
double x1,y1,x2,y2;//首先要注意题目中说明了输入数据会是实数
double distance = 0;
while(scanf("%lf%lf%lf%lf",&x1,&y1,&x2,&y2)!=EOF){
distance = sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1));
printf("%.2lf\n",distance);//注意保留两位小数的写法
}
return 0;
}
这里只需要注意一下球的体积计算公式就可以了: 4 π r 3 3 \frac{4πr^3}{3} 34πr3
#include
#define PI 3.1415927
int main(){
double r;
double tiji;//英文学的不好,体积是啥自己查
while(scanf("%lf",&r)!=EOF){
tiji = 4 * PI * r * r * r / 3.0;//这里为了以防万一我用的3.0来求精度
printf("%.3lf\n",tiji);
}
return 0;
}
#include
int main(){
double x;
while ((scanf("%lf", &x))!= EOF)
printf("%.2f\n", (x > 0) ? x : -x);
return 0;
}
#include
int main(){
int score;
while(scanf("%d",&score)!=EOF){
if(score >= 90 && score <= 100){
printf("A\n");
}else if(score >= 80 && score <= 89){
printf("B\n");
}else if(score >= 70 && score <= 79){
printf("C\n");
}else if(score >= 60 && score <= 69){
printf("D\n");
}else if(score >= 0 && score <= 59){
printf("E\n");
}else {
printf("Score is error!\n");
}
}
return 0;
}
这里首先要知道闰年的判断条件:能被4整除并且不能被100整除或者能被400整除
#include
int main(){
int day[12] = {31,28,31,30,31,30,31,31,30,31,30,31};
int year,month,date;
int num = 0;
while(scanf("%d/%d/%d",&year,&month,&date)!=EOF){//输入要随机应变
num = 0;
if((year % 400 == 0) || ((year % 100 != 0) && (year % 4 == 0))){
day[1] = 29;
}else{
day[1] = 28;
}
for(int i = 0;i < month - 1;i++){//要计算到前一个月
num += day[i];
}
num += date;//加上本月的天数
printf("%d\n",num);
}
return 0;
}
#include
int main(){
int n,a,result;
while(scanf("%d",&n)!=EOF){
result = 1;//因为是成绩所以要用1进行初始化
while(n--){
scanf("%d",&a);
if(a % 2 != 0)
result *= a;
}
printf("%d\n",result);
}
return 0;
}
#include
int main(){
int m,n;
int x,y;
while(scanf("%d%d",&m,&n)!=EOF){
x = 0;y = 0;
if(m > n){
int temp = m;
m = n;
n = temp;
}
for(int i = m;i <= n;i++){
if(i % 2 == 0){
x += i*i;
}else{
y += i*i*i;
}
}
printf("%d %d\n",x,y);
}
return 0;
}
#include
int main(){
int n;
double num;
int a,b,c;
while(scanf("%d",&n)!=EOF && n){
a = 0;b = 0;c = 0;
while(n--){
scanf("%lf",&num);
if(num < 0){
a++;
}else if(num > 0){
c++;
}else{
b++;
}
}
printf("%d %d %d\n",a,b,c);
}
return 0;
}
#include
#include
int main(){
double n;
int m;
double a[10000] = {0};
double sum = 0;
while(scanf("%lf%d",&n,&m)!=EOF){
sum = 0;
for(int i = 0;i < m;i++){
if(i == 0){
a[i] = n;
}else{
a[i] = sqrt(a[i-1]);
}
sum += a[i];
}
printf("%.2lf\n",sum);
}
return 0;
}
#include
int main(){
int m,n;
while(scanf("%d%d",&m,&n)!=EOF){
bool flag = false;//来判断是否是第一个数据,由此判断什么时候输出空格
for(int i = m;i <= n;i++){
int gewei = i%10;//个位上的数
int shiwei = i/10%10;//十位上的数
int baiwei = i/100%10;//百位上的数
int temp = gewei*gewei*gewei+shiwei*shiwei*shiwei+baiwei*baiwei*baiwei;
if(i == temp){
if(flag == false){//是第一个数据则直接输出
printf("%d",i);
}else{//不是第一个数据要先输出一个空格再输出结果
printf(" %d",i);
}
flag = true;
}
}
if(flag == false){//没有修改过说明没有水仙花数
printf("no\n");
}else{
printf("\n");
}
}
return 0;
}
#include
#include
int main(){
int m;
int n;
double sum = 0;
scanf("%d",&m);
while(m--){
sum = 0;
scanf("%d",&n);
for(int i = 1;i <= n;i++){
sum += pow(-1.0,(double)(i - 1)) * 1.0 / i;
}
printf("%.2lf\n",sum);
}
return 0;
}
记住三角形的判断条件:两边之和大于第三边
#include
int main(){
int M;
float A,B,C;
scanf("%d",&M);
while(M--){
scanf("%f%f%f",&A,&B,&C);
if(A+B>C&&A+C>B&&B+C>A){
printf("YES\n");
}else{
printf("NO\n");
}
}
return 0;
}
#include
int main(){
int A,B;
while(scanf("%x%x",&A,&B)!=EOF){
printf("%d\n",A+B);
}
return 0;
}
#include
#include
int main(){
int T;
char temp[1000];
scanf("%d",&T);
getchar();//接收换行
while(T--){
gets(temp);
int length = strlen(temp);
int flag = -1;
for(int i =0;i<=length;i++){
if(temp[i]==' '||i == length){//遇到空格就进行一次处理,把当前单词反转,同理换行
for(int j = i - 1;j >= 0 && j != flag;j--){
putchar(temp[j]);
}
flag = i;
if(i!=length) putchar(' ');
}
}
printf("\n");
}
return 0;
}
翻译一下就是:n个人围成一个圈玩找手帕游戏,手帕藏在某一个人的箱子里,Haha来找,每一次他都会跳过m-1个人。问Haha是不是一定能找到手帕。
解析:因为Haha找的次数是无限的,可以永远找下去,所以,只要他能把所有的人都找一遍就一定能找到。但按照他的这种找法,如果n和m不互质的话就会出现某些人是永远不会找。所以看一下 n和m的最大公约数是否等于1就行了。
题目本身不难,难在想法上,看你能不能看出来这是一个互质的问题,采用辗转相除法就可以啦
#include
int check(int n,int m){
while(m){
int r = n % m;
n = m;
m = r;
}
return n;
}
int main(){
int N,M;
while(scanf("%d%d",&N,&M)!=EOF&&N!=-1&&M!=-1){
int r = check(N,M);
if(r==1){
printf("YES\n");
}else{
printf("POOR Haha\n");
}
}
return 0;
}
#include
int main(){
int N = 12;
double num = 0;
double sum = 0;
while(N--){
scanf("%lf",&num);
sum+=num;
}
printf("$%.2lf\n",sum/12);
return 0;
}
#include
#include
int main(){
char input[256];
gets(input);
while(input[0]!='#'){
int length = strlen(input);
int sum = 0;
for(int i = 0;i < length;i++){
int distance = input[i] - 64;
int value = 0;
if(distance >=1 && distance <= 26){
value = distance;
}
sum += (i + 1) * value;
}
printf("%d\n",sum);
gets(input);
}
return 0;
}
#include
int main(){
int T;
int A,B;
char C;
float result;
scanf("%d",&T);
getchar();
while(T--){
scanf("%c%d%d",&C,&A,&B);
getchar();
switch(C){
case '+':result = A+B;break;
case '-':result = A-B;break;
case '*':result = A*B;break;
case '/':result = (double)A/B;break;
}
if(C=='/' && A%B!=0){
printf("%.2f\n",result);
}else{
printf("%d\n",(int)result);
}
}
return 0;
}
#include
using namespace std;
int main(){
int i;
int thousand[3],hundred[3],ten[3],num[3],sum[3];
for(i=1000;i<10000;i++){
thousand[0]=i/1000;
hundred[0]=i/100-10*thousand[0];
ten[0]=(i%100)/10;
num[0]=i%10;
thousand[1]=i/1728;
hundred[1]=i/144-12*thousand[1];
ten[1]=(i%144)/12;
num[1]=i%12;
thousand[2]=i/4096;
hundred[2]=i/256-16*thousand[2];
ten[2]=(i%256)/16;
num[2]=i%16;
sum[0]=thousand[0]+hundred[0]+ten[0]+num[0];
sum[1]=thousand[1]+hundred[1]+ten[1]+num[1];
sum[2]=thousand[2]+hundred[2]+ten[2]+num[2];
if(sum[0]==sum[1]&&sum[0]==sum[2])
cout<<i<<endl;
}
return 0;
}
#include
#include
using namespace std;
int main(void)
{
int n;
string input_str,place;
cin>>n;
for(int i=0; i<n; i++)
{
cin>>input_str;
if(input_str.substr(0,2)=="33")
place="Zhejiang";
else if(input_str.substr(0,2)=="11")
place="Beijing";
else if(input_str.substr(0,2)=="71")
place="Taiwan";
else if(input_str.substr(0,2)=="81")
place="Hong Kong";
else if(input_str.substr(0,2)=="82")
place="Macao";
else if(input_str.substr(0,2)=="54")
place="Tibet";
else if(input_str.substr(0,2)=="21")
place="Liaoning";
else if(input_str.substr(0,2)=="31")
place="Shanghai";
cout <<"He/She is from"<<" "<< place
<< ",and his/her birthday is on"<<" "<<input_str.substr(10,2)<<","
<<input_str.substr(12,2)<<","<<input_str.substr(6,4)<<" "
<<"based on the table."<<endl;
}
return 0;
}
#include
using namespace std;
int check_prime_num(int arg)
{
if(arg<=0)return 0;
else if(arg==1) return 0;
else if(arg==2)return 1;
else
{
for(int j=2; j<arg; j++)
{
if(arg%j==0) return 0;
}
return 1;
}
}
int main(void)
{
int x,y,temp,flag=0;
while(cin>>x>>y)
{
if(x==0&&y==0)break;
for(int i=x; i<=y; i++)
{
temp=i*i+i+41;
if(check_prime_num(temp)==1)
++flag;
}
if(flag==(y-x+1))cout<<"OK"<<endl;
else cout<<"Sorry"<<endl;
flag=0;
}
return 0;
}
我们来简单的想一下,猴子每次吃前一天的一半多一个,那么我们前一天的桃子数量是后一天桃子数量+1的2倍,由此可以写出我们的代码
#include
int main(){
int n;
while ((scanf("%d",&n))!=EOF){
int sum = 1;
for (int i = n-1; i != 0; --i){
sum = (sum + 1) * 2;
}
printf("%d\n",sum);
}
return 0;
}
#include
int main(){
double result;
int n = 0;
double score;
double max = 0,min = 100;
while(scanf("%d",&n)!=EOF){
result = 0;
max = 0;min = 100;
for(int i = 0;i < n;i++){
scanf("%lf",&score);
result += score;
if(score > max){
max = score;
}
if(score < min){
min = score;
}
}
result = (double)(result - max - min)/(n - 2);
printf("%.2lf\n",result);
}
return 0;
}
#include
#include
using namespace std;
int main(){
int n, m, i;
while(cin >> n >> m){
for(i = 1; i + m <= n; i += m){
printf("%d ", 2*i + m - 1);
}
printf("%d\n",n + i);
}
return 0;
}
#include
int main(){
int n;
int temp[100] = {0};
int min = 10000000;
int xiabiao = 0;
scanf("%d",&n);
while(n){
min = 10000000;
xiabiao = 0;
for(int i = 0;i < n;i++){
scanf("%d",&temp[i]);
if(min > temp[i]){
xiabiao = i;
min = temp[i];
}
}
if(xiabiao){//交换
int t = temp[xiabiao];
temp[xiabiao] = temp[0];
temp[0] = t;
}
for(int i = 0;i < n;i++){//输出
if(i == 0)
printf("%d",temp[i]);
else
printf(" %d",temp[i]);
}
printf("\n");
scanf("%d",&n);
}
return 0;
}
#include
#include
int main(){
int n;
scanf("%d",&n);
char string[1000];
while(n--){
scanf("%s",&string);
int length=strlen(string);
int count=0;
for(int i=0;i<length;i++){
if(string[i]>='0'&&string[i]<='9'){
count++;
}
}
printf("%d\n",count);
}
return 0;
}
#include
using namespace std;
int main(){
int n;//year
int a;//一年熟母牛
int b;//两年熟母牛
int c;//三年熟母牛
int d;//全熟母牛
int x;
while(cin>>n && n != 0){
d = 1;
a = b = c = 0;
x = 1;
for(int i = 0;i < n - 1;i++){
d += c;
x = d;
c = b;
b = a;
a = x;
}
cout<<a+b+c+d<<endl;
}
return 0;
}
#include
int main(){
int n,m;
while(~ scanf("%d %d",&n,&m)&&n&&m) {
int t[100];
for(int i=0; i<n; i++) {
scanf("%d",&t[i]);
}
t[n]=m;
int k;
for(int i=0; i<=n; i++) {
for(int j=0; j<=n-i-1; j++) {
if(t[j]>t[j+1]) {
k=t[j];
t[j]=t[j+1];
t[j+1]=k;
}
}
}
for(int i=0; i<=n; i++) {
if(i==n)
printf("%d\n",t[i]);
else
printf("%d ",t[i]);
}
}
return 0;
}
#include
#include
int main(){
int n;
int num[100] = {0};
scanf("%d",&n);
while(n){
for(int i = 0;i < n;i++){
scanf("%d",&num[i]);
}
for(int k = 0;k < n;k++){
for(int j = 0;j < n - k - 1;j++){
if(abs(num[j]) < abs(num[j + 1])){
int temp = num[j];
num[j] = num[j + 1];
num[j + 1] = temp;
}
}
}
for(int i = 0;i < n;i++){
if(i==0)
printf("%d",num[i]);
else
printf(" %d",num[i]);
}
printf("\n");
scanf("%d",&n);
}
return 0;
}
#include
int main(){
int n;
int money,num;
int i;
scanf("%d",&n);
while(n){
num = 0;
for(i = 0;i < n;i++){
scanf("%d",&money);
int hundred = money / 100;
int wushi = (money-hundred*100)/50;
int shi = (money-hundred*100-wushi*50)/10;
int wu = (money-hundred*100-wushi*50-shi*10)/5;
int er = (money-hundred*100-wushi*50-shi*10-wu*5)/2;
int yi = money-hundred*100-wushi*50-shi*10-wu*5-er*2;
num += hundred+wushi+shi+wu+er+yi;
}
printf("%d\n",num);
scanf("%d",&n);
}
return 0;
}
#include
#include
#include
using namespace std;
int main(){
int m, n;
while (cin >> m >> n && m && n){
vector<vector<int> > mm(m);
for(int i = 0; i < m; ++ i)
mm[i].resize(n);
int row, col, maxs;
row = col = maxs = 0;
for(int i = 0; i < mm.size(); ++ i)
for(int j = 0; j < (mm[0].size()); ++ j){
cin >> mm[i][j];
if(abs(mm[i][j]) > abs(maxs)){
maxs = mm[i][j];
row = i;
col = j;
}
}
mm.clear();
cout << row + 1 << ' ' << col + 1 << ' ' << maxs << endl;
}
return 0;
}
#include
int main(){
int n,m;
int a[50][5] = {0};
int i,j;
int stu_sum[50] = {0};
int sub_sum[5] = {0};
double sub_avg[5] = {0};
int num = 0;;
while(scanf("%d%d",&n,&m)!=EOF){
num = 0;
for(i = 0;i<50;i++){
for(j = 0;j < 5;j++){
a[i][j] = 0;
sub_sum[j] = 0;
sub_avg[j] = 0;
}
stu_sum[i] = 0;
}
for(i = 0;i < n;i++){
for(j = 0;j < m;j++){
scanf("%d",&a[i][j]);
sub_sum[j] += a[i][j];
stu_sum[i] += a[i][j];
}
}
for(j = 0;j < m;j++)
sub_avg[j] = (double)sub_sum[j] / n;
for(i = 0;i < n;i++){
bool flag = true;
for(j = 0;j < m;j++){
if(a[i][j] < sub_avg[j]){
flag = false;
break;
}
}
if(i == 0){
printf("%.2lf",(double)stu_sum[i] / m);
}else{
printf(" %.2lf",(double)stu_sum[i] / m);
}
if(flag)
num++;
}
printf("\n");
for(j = 0;j < m;j++){
if(j == 0)
printf("%.2lf",sub_avg[j]);
else
printf(" %.2lf",sub_avg[j]);
}
printf("\n");
printf("%d\n\n",num);
}
return 0;
}
#include
#include
int main(){
int n;
char input[50];
bool flag;
scanf("%d",&n);
getchar();
while(n--){
flag = true;
gets(input);
int length = strlen(input);
for(int i = 0;i < length;i++){
if(i == 0){
if(input[i]!='_'&&!(input[i]>='a'&&input[i]<='z')&&!(input[i]>='A'&&input[i]<='Z')){
flag = false;
break;
}
}else{
if(!(input[i]>='a'&&input[i]<='z')&&!(input[i]>='A'&&input[i]<='Z')&&!(input[i]>='0'&&input[i]<='9')&&input[i]!='_'){
flag = false;
break;
}
}
}
if(flag)
printf("yes\n");
else
printf("no\n");
}
return 0;
}
#include
#include
int main(){
char c[100];
while(scanf("%s",c)!=EOF){
char max='A';
for(int i=1;i<=strlen(c);i++){
if(c[i-1]>=max) max=c[i-1];
}
for(int i=1;i<=strlen(c);i++){
putchar(c[i-1]);
if(c[i-1]==max) printf("(max)");
}
printf("\n");
}
}
#include
#include
#include
using namespace std;
int main()
{
string str;
while(getline(cin,str)){
str[0]=(char)(str[0]-'a'+65);
for(int i=1;i<str.size();i++)
{
if(str[i]==' ')
str[i+1]=(char)(str[i+1]-'a'+65);
}
cout<<str<<endl;
}
return 0;
}
#include
#include
int main(){
int n;
char input[1000];
int num[5];
int i;
scanf("%d",&n);
getchar();
while(n--){
for(i = 0;i <5;i++)
num[i] = 0;
gets(input);
int length = strlen(input);
for(i=0;i<length;i++){
if(input[i]>='A'&&input[i]<='Z')
input[i] = input[i]+'a'-'A';
switch(input[i]){
case 'a':num[0]++;break;
case 'e':num[1]++;break;
case 'i':num[2]++;break;
case 'o':num[3]++;break;
case 'u':num[4]++;break;
default:break;
}
}
if(n)
printf("a:%d\ne:%d\ni:%d\no:%d\nu:%d\n\n",num[0],num[1],num[2],num[3],num[4]);
else
printf("a:%d\ne:%d\ni:%d\no:%d\nu:%d\n",num[0],num[1],num[2],num[3],num[4]);
}
return 0;
}
#include
int main() {
int n, i;
int num[100], n1, n2, temp;
while (~scanf("%d", &n)) {
for (int j = 0; j < n; j++) {
scanf("%d", &num[j]);
}
for (i = 0; i < n - 1; i++) {
n1 = num[i];
n2 = num[i + 1];
while (n1 % n2 != 0) {
temp = n1 % n2;
n1 = n2;
n2 = temp;
}
num[i + 1] = num[i] / n2* num[i + 1];
}
printf("%d\n", num[i]);
}
return 0;
}
#include
#include
int main(){
int n;
scanf("%d\n",&n);
char input[1024];
bool flag;
while(n--){
flag = true;
gets(input);
for(int i = 0;i < strlen(input)/2.0;i++){
if(input[i] != input[strlen(input)-1-i]){
printf("no\n");
flag = false;
break;
}
}
if(flag)
printf("yes\n");
}
return 0;
}
这个题我觉得我有必要讲一下,这个题对我来说很新鲜,因为我没处理过汉字的问题,在处理这个问题之前我们需要了解一下汉字机内码在计算机内部的表示方式。
首先我们都知道由于计算机是由美国人发明的,所以ASCII码只能用来存储英文,ASCII只占一个字节,那么后来的汉字怎么用计算机表示呢,这个时候就提出来用两个字节来存储汉字和其他文字,每个字节最高位置1,而计算机中都是用补码来存储的,这就意味着汉字的每一个字节都是负数,所以求汉字的个数其实就是求字符串中小于0的个数有几个再除2即可
#include
#include
int main(){
int n,m=0,i,len;
char a[10000];
scanf("%d",&n);
getchar(); //接收换行
while(n--){
m=0;
gets(a);
len=strlen(a);
for(i=0;i<len;i++){
if(a[i]<0)
m++;
}
printf("%d\n",m/2);
}
return 0;
}
#include
#include
int main(){
int n;
while(scanf("%d",&n)!=EOF){
int a[100][100]={0};
int i=1,j=1,k=0;
for(;i<=n;++i){
for(j=1;j<=i;++j){
if(j==1)
a[i][j]=1;
else if(j==i){
a[i][j]=1;
break;
}else
a[i][j]=a[i-1][j-1]+a[i-1][j];
}
}
for(i=1;i<=n;++i){
for(j=1;j<=i;++j){
if(i!=j){
printf("%d ",a[i][j]);
}else{
printf("%d\n",a[i][j]);
break;}
}
}
printf("\n");
}
return 0;
}
#include
int main(){
int M,A,B;
int total;
bool flag;
scanf("%d",&M);
while(M--){
total = 1;
flag = true;
scanf("%d%d",&A,&B);
for(int i= 2;i < A;i++){
if(A % i == 0)
total += i;
}
if(total != B){
printf("NO\n");
continue;
}else{
total = 1;
for(int i= 2;i < B;i++){
if(B % i == 0)
total += i;
}
if(total != A){
printf("NO\n");
}else{
printf("YES\n");
}
}
}
return 0;
}
#include
int main(){
int N,num,mei;
scanf("%d",&N);
while(N--){
mei = 3;
scanf("%d",&num);
for(int i = 0;i < num;i++)
mei = 2*(mei - 1);
printf("%d\n",mei);
}
return 0;
}
这个题乍一看很简单嘛,其实…坑在于数字的范围没给…所以只能用字串来处理了,然而这就是这个题最烦的地方,难倒是不难,就是烦,烦,烦…
#include
#include
using namespace std;
//对数字进行统一处理,返回数字第一位不为0的位置
int change_char(char *letter,int *len)
{
int i=0;
int len_var=(*len)-1;
//如果是符号,则跳过
if(letter[i]=='-')
{
++i;
--(*len);
}
//去掉前面的0
while(letter[i]=='0'&&i<=len_var)
{
--(*len);
++i;
}
//去掉小数点之后最后无效的0,从最后一位算起
for(int j=0; j<=len_var; j++)
{
if(letter[j]=='.')
{
while(letter[len_var]=='0'&&len_var>=0)
{
--(*len);
--len_var;
}
break;
}
}
//如果小数点后面都是无效的0.则去掉小数点
if(letter[len_var]=='.')
--(*len);
return i;
}
int main()
{
char a[100000],b[100000];
int symbol_flag,lenght_a,lenght_b,pos_char_a,pos_char_b,out_flag=1;
while(cin>>a>>b)
{
/*当两者符号不一样的时候做一个标志,
因为存在-0=0这种情况,所以当符号不一样不能直接下定论两者不相等
*/
if(a[0]=='-'&&b[0]!='-' || a[0]!='-'&&b[0]=='-')
symbol_flag=1;
//求出a,b长度
lenght_a=strlen(a);
lenght_b=strlen(b);
//求出第一位不为0的数的位置
pos_char_a= change_char(a,&lenght_a);
pos_char_b= change_char(b,&lenght_b);
//当两者的有效位数不一样直接是不相等,注意下面几个continue的作用
if(lenght_a!=lenght_b)
{
cout<<"NO"<<endl;
continue;
}
//以下几个语句都是在lenght_a=lenght_b才执行的
if(symbol_flag==1&&lenght_a==0)
{
cout<<"YES"<<endl;
continue;
}
//当符号不一样,且lenght_a或者lenght_b都不为0时候是不相等的
if(symbol_flag==1)
{
cout<<"NO"<<endl;
continue;
}
//当符号一样,长度相等执行下面语句,从有效长度起始位置开始判断各位是否相等
for(int i=pos_char_a,j=pos_char_b; i<lenght_a; i++,j++)
{
if(a[i]!=b[j])
{
cout<<"NO"<<endl;
out_flag=0;
break;
}
}
if(out_flag==1)
cout<<"YES"<<endl;
//从新初始化
out_flag=1;
}
return 0;
}
#include
using namespace std;
int main()
{
int t; cin >> t;
while (t--)
{
char let;
int num;
cin >> let >> num;
int res = 0;
if (let <= 'Z' && let >= 'A')
res = let - 'A' + 1;
else if (let <= 'z' && let >= 'a')
res = 'a' - let - 1;
cout << res + num << endl;
}
return 0;
}
这都是最基础的题目,据说天津大学机试的题目难度类似于第11页,建议学习一下C++标准库中的一些oj中经常用到的东西,比如:vector,queue,map等等,不需要很深入,但是要了解方法的使用。
如果对于哪一道题想要思路的讲解可以给我评论,我看到了就会及时更改。
PS:没有本人的许可,这篇博客不允许转载