杂记

https://acm.ecnu.edu.cn/contest/231/?tdsourcetag=s_pctim_aiomsg

A. 纸条(模拟)
E 木木给女朋友的项链(数学)
鸽巢定理。判断最大数和剩余数之和的关系,若前者小于等于后者加一,则可以,否则不可以。不要随便用数组,万一范围太大,很容易溢出。
代码:
#include <cstdio>
#include <iostream>
#include <cmath>
#include <algorithm>
typedef long long ll;
using namespace std;
int main()
{
	ll n;
	ll num,sum;
	ll max;
	int t;
    scanf("%d",&t);
    while(t--)
    {
    	sum=0,max=-1;
    	scanf("%lld",&n);
    	for(int i=0;i<n;i++) 
    	{
    		scanf("%lld",&num);
    		sum+=num;
    		if(num>max) max=num;
		}
		if(max<=sum-max+1) puts("Yes");
	    else puts("No");
	}
	return 0;
}
C 凶案现场
strstr函数
语法:
str1: 被查找目标 
str2: 要查找对象 
返回值:若str2是str1的子串,则返回str2在str1的首次出现的地址;如果str2不是str1的子串,则返回NULL。
例子:
char str[]="1234xyz";
char *str1=strstr(str,"34");
cout << str1 << endl;
 
显示的是: 34xyz
代码:
#include <cstdio>
#include <cstring>
#include <iostream>
#include <string>
const int MAXN=100010;
using namespace std;
int main()
{
	int t;
	char ch1[MAXN],ch2[MAXN];
	scanf("%d",&t);
	while(t--)
	{
	   cin>>ch1;
	   cin>>ch2;
	   if(strstr(ch2,ch1)) printf("YES
");
	   else printf("NO
");
    }
	return 0;
}
四、PTA
7-37 整数分解为若干项之和
 
7-36 复数四则运算 (15 分)
这题AC了,但是有大量冗余代码,我的思路很简单,首先依据复数的运算法则:
加法减法好做,就是乘法和除法:
(a+bi)*(c+di)=(ac-bd)+(bc+ad)i;
  (a+bi)/(c+di)=(ac+bd)/(c*c+d*d)+(bc-ad)/(c*c+d*d)i;
知道了这个后,我先设了value1到value8变量,分别存放运算后的实数复数值,大体思路知道,但是由于无法确定b和d的正负以及计算出来的复数项值的正负,然后我就用if语句一个一个的判断。。。还有就是题目规定如果value值为零就不能输出,这个我开始就直接判断是否为0,但是根本判断不出来,因为value值是double类型,所以我用了跟0.0比较以及用-0.05到+0.05范围比较,如果value>=-0.05&&value<=0.05,则由于四舍五入得0,就这样判断是否为0,然后又一个一个的判断。。。所以160多行冗余代码。。。
#include <cstdio>
int main()
{
	double a,b,c,d;
	double value1,value2,value3,value4,value5,value6,value7,value8;
	scanf("%lf %lf %lf %lf",&a,&b,&c,&d);
	value1=a+c,value2=b+d;
	value3=a-c,value4=b-d;
	value5=a*c-b*d,value6=b*c+a*d;
	value7=(a*c+b*d)/(c*c+d*d);
	value8=(b*c-a*d)/(c*c+d*d);
    //求和
	if((int)(value1)!=0&&(int)(value2)!=0) 
	{
	   if((int)(value2)>0) {
	   if(b>=0&&d>=0) printf("(%.1f+%.1fi) + (%.1f+%.1fi) = %.1f+%.1fi
",a,b,c,d,value1,value2);
	   else if(b<0&&d>=0) printf("(%.1f%.1fi) + (%.1f+%.1fi) = %.1f+%.1fi
",a,b,c,d,value1,value2);
	   else if(b>=0&&d<0) printf("(%.1f+%.1fi) + (%.1f%.1fi) = %.1f+%.1fi
",a,b,c,d,value1,value2);
	   else if(b<0&&d<0) printf("(%.1f%.1fi) + (%.1f%.1fi) = %.1f+%.1fi
",a,b,c,d,value1,value2);
      }
	   else {
	   if(b>=0&&d>=0) printf("(%.1f+%.1fi) + (%.1f+%.1fi) = %.1f%.1fi
",a,b,c,d,value1,value2); 
	   else if(b<0&&d>=0) printf("(%.1f%.1fi) + (%.1f+%.1fi) = %.1f%.1fi
",a,b,c,d,value1,value2);
	   else if(b>=0&&d<0) printf("(%.1f+%.1fi) + (%.1f%.1fi) = %.1f%.1fi
",a,b,c,d,value1,value2);
	   else if(b<0&&d<0) printf("(%.1f%.1fi) + (%.1f%.1fi) = %.1f%.1fi
",a,b,c,d,value1,value2);
       }
	}
	else if((int)(value1)==0&&(int)(value2)!=0) 
	{
      if(b>=0&&d>=0) printf("(%.1f+%.1fi) + (%.1f+%.1fi) = %.1fi
",a,b,c,d,value2);
      else if(b<0&&d>=0) printf("(%.1f%.1fi) + (%.1f+%.1fi) = %.1fi
",a,b,c,d,value2);
	   else if(b>=0&&d<0) printf("(%.1f+%.1fi) + (%.1f%.1fi) = %.1fi
",a,b,c,d,value2);
	   else if(b<0&&d<0) printf("(%.1f%.1fi) + (%.1f%.1fi) = %.1fi
",a,b,c,d,value2);
    }
	else if((int)(value1)!=0&&(int)(value2)==0) 
	{
	 if(b>=0&&d>=0) printf("(%.1f+%.1fi) + (%.1f+%.1fi) = %.1f
",a,b,c,d,value1);
	 else if(b<0&&d>=0) printf("(%.1f%.1fi) + (%.1f+%.1fi) = %.1f
",a,b,c,d,value1);
	   else if(b>=0&&d<0) printf("(%.1f+%.1fi) + (%.1f%.1fi) = %.1f
",a,b,c,d,value1);
	   else if(b<0&&d<0) printf("(%.1f%.1fi) + (%.1f%.1fi) = %.1f
",a,b,c,d,value1);
    }
	else 
	{
      if(b>=0&&d>=0) printf("(%.1f+%.1fi) + (%.1f+%.1fi) = 0.0
",a,b,c,d);
      else if(b<0&&d>=0) printf("(%.1f%.1fi) + (%.1f+%.1fi) = 0.0
",a,b,c,d);
	   else if(b>=0&&d<0) printf("(%.1f+%.1fi) + (%.1f%.1fi) = 0.0
",a,b,c,d);
	   else if(b<0&&d<0) printf("(%.1f%.1fi) + (%.1f%.1fi) = 0.0
",a,b,c,d);
    }
	//求减 
	if((int)(value3)!=0&&(int)(value4)!=0) 
	{
	   if((int)(value4)>0) 
	   {
	    if(b>=0&&d>=0) printf("(%.1f+%.1fi) - (%.1f+%.1fi) = %.1f+%.1fi
",a,b,c,d,value3,value4);
	    else if(b<0&&d>=0) printf("(%.1f%.1fi) - (%.1f+%.1fi) = %.1f+%.1fi
",a,b,c,d,value3,value4);
	   else if(b>=0&&d<0) printf("(%.1f+%.1fi) - (%.1f%.1fi) = %.1f+%.1fi
",a,b,c,d,value3,value4);
	   else if(b<0&&d<0) printf("(%.1f%.1fi) - (%.1f%.1fi) = %.1f+%.1fi
",a,b,c,d,value3,value4);
	   }
	   else 
	   {
	     if(b>=0&&d>=0) printf("(%.1f+%.1fi) - (%.1f+%.1fi) = %.1f%.1fi
",a,b,c,d,value3,value4); 
	     else if(b<0&&d>=0) printf("(%.1f%.1fi) - (%.1f+%.1fi) = %.1f%.1fi
",a,b,c,d,value3,value4);
	   else if(b>=0&&d<0) printf("(%.1f+%.1fi) - (%.1f%.1fi) = %.1f%.1fi
",a,b,c,d,value3,value4);
	   else if(b<0&&d<0) printf("(%.1f%.1fi) - (%.1f%.1fi) = %.1f%.1fi
",a,b,c,d,value3,value4);
	   }
	}
	else if((int)(value3)==0&&(int)(value4)!=0) 
	{
	 if(b>=0&&d>=0) printf("(%.1f+%.1fi) - (%.1f+%.1fi) = %.1fi
",a,b,c,d,value4);
	 else if(b<0&&d>=0) printf("(%.1f%.1fi) - (%.1f+%.1fi) = %.1fi
",a,b,c,d,value4);
	   else if(b>=0&&d<0) printf("(%.1f+%.1fi) - (%.1f%.1fi) = %.1fi
",a,b,c,d,value4);
	   else if(b<0&&d<0) printf("(%.1f%.1fi) - (%.1f%.1fi) = %.1fi
",a,b,c,d,value4);
    }
	else if((int)(value3)!=0&&(int)(value4)==0) 
	{
	  if(b>=0&&d>=0) printf("(%.1f+%.1fi) - (%.1f+%.1fi) = %.1f
",a,b,c,d,value3);
	  else if(b<0&&d>=0) printf("(%.1f%.1fi) - (%.1f+%.1fi) = %.1f
",a,b,c,d,value3);
	   else if(b>=0&&d<0) printf("(%.1f+%.1fi) - (%.1f%.1fi) = %.1f
",a,b,c,d,value3);
	   else if(b<0&&d<0) printf("(%.1f%.1fi) - (%.1f%.1fi) = %.1f
",a,b,c,d,value3);
    }
	else 
	{
	 if(b>=0&&d>=0) printf("(%.1f+%.1fi) - (%.1f+%.1fi) = 0.0
",a,b,c,d);
      else if(b<0&&d>=0) printf("(%.1f%.1fi) - (%.1f+%.1fi) = 0.0
",a,b,c,d);
	   else if(b>=0&&d<0) printf("(%.1f+%.1fi) - (%.1f%.1fi) = 0.0
",a,b,c,d);
	   else if(b<0&&d<0) printf("(%.1f%.1fi) - (%.1f%.1fi) = 0.0
",a,b,c,d);
    }
	//求乘 
	if((int)(value5)!=0&&(int)(value6)!=0) 
	{
	   if((int)(value6)>0) 
	   {
	     if(b>=0&&d>=0) printf("(%.1f+%.1fi) * (%.1f+%.1fi) = %.1f+%.1fi
",a,b,c,d,value5,value6);
	     else if(b<0&&d>=0) printf("(%.1f%.1fi) * (%.1f+%.1fi) = %.1f+%.1fi
",a,b,c,d,value5,value6);
	   else if(b>=0&&d<0) printf("(%.1f+%.1fi) * (%.1f%.1fi) = %.1f+%.1fi
",a,b,c,d,value5,value6);
	   else if(b<0&&d<0) printf("(%.1f%.1fi) * (%.1f%.1fi) = %.1f+%.1fi
",a,b,c,d,value5,value6);
	   }
	   else 
	   {
	     if(b>=0&&d>=0) printf("(%.1f+%.1fi) * (%.1f+%.1fi) = %.1f%.1fi
",a,b,c,d,value5,value6); 
	     else if(b<0&&d>=0) printf("(%.1f%.1fi) * (%.1f+%.1fi) = %.1f%.1fi
",a,b,c,d,value5,value6);
	   else if(b>=0&&d<0) printf("(%.1f+%.1fi) * (%.1f%.1fi) = %.1f%.1fi
",a,b,c,d,value5,value6);
	   else if(b<0&&d<0) printf("(%.1f%.1fi) * (%.1f%.1fi) = %.1f%.1fi
",a,b,c,d,value5,value6);
	   }
	}
	else if((int)(value5)==0&&(int)(value6)!=0) 
	{
	   if(b>=0&&d>=0) printf("(%.1f+%.1fi) * (%.1f+%.1fi) = %.1fi
",a,b,c,d,value6);
	   else if(b<0&&d>=0) printf("(%.1f%.1fi) * (%.1f+%.1fi) = %.1fi
",a,b,c,d,value6);
	   else if(b>=0&&d<0) printf("(%.1f+%.1fi) * (%.1f%.1fi) = %.1fi
",a,b,c,d,value6);
	   else if(b<0&&d<0) printf("(%.1f%.1fi) * (%.1f%.1fi) = %.1fi
",a,b,c,d,value6);
    }
	else if((int)(value5)!=0&&(int)(value6)==0) 
	{
	  if(b>=0&&d>=0) printf("(%.1f+%.1fi) * (%.1f+%.1fi) = %.1f
",a,b,c,d,value5);
	  else if(b<0&&d>=0) printf("(%.1f%.1fi) * (%.1f+%.1fi) = %.1f
",a,b,c,d,value5);
	   else if(b>=0&&d<0) printf("(%.1f+%.1fi) * (%.1f%.1fi) = %.1f
",a,b,c,d,value5);
	   else if(b<0&&d<0) printf("(%.1f%.1fi) * (%.1f%.1fi) = %.1f
",a,b,c,d,value5);
    }
	else 
	{
	  if(b>=0&&d>=0) printf("(%.1f+%.1fi) * (%.1f+%.1fi) = 0.0
",a,b,c,d);
      else if(b<0&&d>=0) printf("(%.1f%.1fi) * (%.1f+%.1fi) = 0.0
",a,b,c,d);
	   else if(b>=0&&d<0) printf("(%.1f+%.1fi) * (%.1f%.1fi) = 0.0
",a,b,c,d);
	   else if(b<0&&d<0) printf("(%.1f%.1fi) * (%.1f%.1fi) = 0.0
",a,b,c,d);
    }
	//printf("%.1f %.1f
",value7,value8);
	//求除 
	if((value7< -0.05||value7>0.05)&&(value8< -0.05||value8>0.05)) 
	{
	   if((value8)>0.00) 
	   {
	     if(b>=0&&d>=0) printf("(%.1f+%.1fi) / (%.1f+%.1fi) = %.1f+%.1fi
",a,b,c,d,value7,value8);
	     else if(b<0&&d>=0) printf("(%.1f%.1fi) / (%.1f+%.1fi) = %.1f+%.1fi
",a,b,c,d,value7,value8);
	   else if(b>=0&&d<0) printf("(%.1f+%.1fi) / (%.1f%.1fi) = %.1f+%.1fi
",a,b,c,d,value7,value8);
	   else if(b<0&&d<0) printf("(%.1f%.1fi) / (%.1f%.1fi) = %.1f+%.1fi
",a,b,c,d,value7,value8);
	   }
	   else 
	   {
	      if(b>=0&&d>=0) printf("(%.1f+%.1fi) / (%.1f+%.1fi) = %.1f%.1fi
",a,b,c,d,value7,value8); 
	      else if(b<0&&d>=0) printf("(%.1f%.1fi) / (%.1f+%.1fi) = %.1f%.1fi
",a,b,c,d,value7,value8);
	   else if(b>=0&&d<0) printf("(%.1f+%.1fi) / (%.1f%.1fi) = %.1f%.1fi
",a,b,c,d,value7,value8);
	   else if(b<0&&d<0) printf("(%.1f%.1fi) / (%.1f%.1fi) = %.1f%.1fi
",a,b,c,d,value7,value8);
	   }
	}
	else if((value7<=0.05&&value7>= -0.05)&&(value8>0.05||value8< -0.05)) 
	{
	  if(b>=0&&d>=0) printf("(%.1f+%.1fi) / (%.1f+%.1fi) = %.1fi
",a,b,c,d,value8);
	  else if(b<0&&d>=0) printf("(%.1f%.1fi) / (%.1f+%.1fi) = %.1fi
",a,b,c,d,value8);
	   else if(b>=0&&d<0) printf("(%.1f+%.1fi) / (%.1f%.1fi) = %.1fi
",a,b,c,d,value8);
	   else if(b<0&&d<0) printf("(%.1f%.1fi) / (%.1f%.1fi) = %.1fi
",a,b,c,d,value8);
    }
	else if((value7>0.05||value7< -0.05)&&(value8<=0.05&&value8>= -0.05)) 
	{
	  if(b>=0&&d>=0) printf("(%.1f+%.1fi) / (%.1f+%.1fi) = %.1f
",a,b,c,d,value7);
	  else if(b<0&&d>=0) printf("(%.1f%.1fi) / (%.1f+%.1fi) = %.1f
",a,b,c,d,value7);
	   else if(b>=0&&d<0) printf("(%.1f+%.1fi) / (%.1f%.1fi) = %.1f
",a,b,c,d,value7);
	   else if(b<0&&d<0) printf("(%.1f%.1fi) / (%.1f%.1fi) = %.1f
",a,b,c,d,value7);
    }
	else 
	{
	  if(b>=0&&d>=0) printf("(%.1f+%.1fi) / (%.1f+%.1fi) = 0.0
",a,b,c,d);
      else if(b<0&&d>=0) printf("(%.1f%.1fi) / (%.1f+%.1fi) = 0.0
",a,b,c,d);
	   else if(b>=0&&d<0) printf("(%.1f+%.1fi) / (%.1f%.1fi) = 0.0
",a,b,c,d);
	   else if(b<0&&d<0) printf("(%.1f%.1fi) / (%.1f%.1fi) = 0.0
",a,b,c,d);
    }
    return 0;
}

进制转换https://oj.ismdeep.com/contest/problem?id=1646&pid=1

金额转换https://oj.ismdeep.com/contest/Problem?id=1646&pid=3

用栈实现倒序输出一个字符串(可以带空格)

1.用string和getline获取一行可以带空格的文本

2.将string转换为 char*

3.将char*入栈

4.将栈内元素出栈即可实现倒叙输出

/*获得一行文本,用栈倒序输出这行文本*/
#include <iostream>
#include <stack>//使用标准库里面的栈
#include <cstring>
#include <string> 
using namespace std;
int main()
{
    string temp;
    getline(cin,temp);//获取一行可能包含有空格的文本
    int len = temp.size();
    const char *ss = temp.c_str();//将string转换成char*
    stack <char> text;
    int i = 0;
    while(len--) {//入栈
        text.push(ss[i++]);
    } 
    while(!text.empty()){//出栈
        cout << text.top();
        text.pop();
    }
    return 0;
} 

PTA基础题目集 7-26 单词长度 (15分) 

https://pintia.cn/problem-sets/14/problems/806

得了12分,两个断点答案错误,一个是空句子,一个是开头结尾多空格。

贴一下12分的代码:

#include <cstdio>
#include <cstring>
#include <string>
#include <iostream>
using namespace std;
int main()
{
	char chr;
	int i=0;
	while((chr=getchar())!='.')
	{
		if(chr!=' ') i++;
		else if(chr==' '){
			if(i!=0) cout<<i<<" ";
			i=0;
		}
	}
	cout<<i<<endl;
	return 0;
 } 

  

天晴了,起飞吧
原文地址:https://www.cnblogs.com/jianqiao123/p/11962777.html