题目内容:
题目说起来很简单,你会读到两个字符串,每个字符串占据一行,每个字符串的长度均小于10000字符,而且第一个字符串的长度小于第二个字符串的。你的程序要找出第一个字符串在第二个字符串中出现的位置,输出这些位置,如果找不到,则输出-1。
注意,第一个字符的位置是0。
注意,第一个字符串在第二个字符串中的位置可能不止一处。
注意,字符串中可能含有空格。
注意,两个字符串的长度一定大于0。
输入格式:
两个字符串,一行一个。
输出格式:
第一个字符串在第二个字符串中出现的位置,按照从小到到的顺序排列,每个数字后面有一个空格。
如果在第二个字符串中找不到第一个字符串,则输出-1。
输入样例:
abba
ababbba abbabbabbabbaacc
输出样例:
8 11 14 17
时间限制:500ms内存限制:32000kb
#include<stdio.h>
#include<string.h>
int main(){
char str1[10000],str2[10000];
gets(str1);
gets(str2);
char *p=str2;//指针的类型和本身的类型一致
int len=strlen(str2);
if(strstr(p,str1)==NULL){//p指向str2,p相当于个数组,strstr是从第一个数组中找第二个数组
printf("-1");//就是找第二个参数
}
while(strstr(p,str1)!=NULL){
p=strstr(p,str1);
printf("%d ",len-strlen(p));
p++;
}
return 0;
}
在不打扰居民的前提下,统计住房空置率的一种方法是根据每户用电量的连续变化规律进行判断。判断方法如下:
" 在观察期内,若存在超过一半的日子用电量低于某给定的阈值 e,则该住房为"可能空置";
" 若观察期超过某给定阈值 D 天,且满足上一个条件,则该住房为"空置"。
现给定某居民区的住户用电量数据,请你统计"可能空置"的比率和"空置"比率,即以上两种状态的住房占居民区住房总套数的百分比。
输入格式:
输入第一行给出正整数 N(≤1000),为居民区住房总套数;正实数 e,即低电量阈值;正整数 D,即观察期阈值。随后 N 行,每行按以下格式给出一套住房的用电量数据:
K E1 E2 ... EK
其中 K 为观察的天数,Ei 为第 i 天的用电量。
输出格式:
在一行中输出"可能空置"的比率和"空置"比率的百分比值,其间以一个空格分隔,保留小数点后 1 位。
#include<iostream>
using namespace std;
int main(){
int n;
int d;//观察阈值天数
double e;//用电量阈值
int x;//空置的用户数
int y;//可能空置的用户数
cin>>n>>e>>d;
for(int i=0;i<n;i++){
int k;//观察天数
double a[1100];//每天的用电量,这报的段错误,把长度改大就好
int m=0;//用电量小于阈值的天数
cin>>k;
for(int j=0;j<k;j++){
cin>>a[j];
if(a[j]<e){
m++;
}
}
if(m > k/2 && k > d){//空置
x++;
//cout<<"空置"<<endl;
}else if(m>k/2){//可能空置
y++;
//cout<<"可能空置"<<endl;
}else{
//cout<<"正常"<<endl;
}
}
printf("%.1f%% %.1f%%",y*100.0/n, x*100.0/n);
return 0;
本题要求编写程序,计算 2 个有理数的和、差、积、商。输入格式:输入在一行中按照 a1/b1 a2/b2 的格式给出两个分数形式的有理数,其中分子和分母全是整型范围内的整数,负号只可能出现在分子前,分母不为 0。输出格式:分别在 4 行中按照 有理数1 运算符 有理数2 = 结果 的格式顺序输出 2 个有理数的和、差、积、商。注意输出的每个有理数必须是该有理数的最简形式 k a/b,其中 k 是整数部分,a/b 是最简分数部分;若为负数,则须加括号;若除法分母为 0,则输出 Inf。题目保证正确的输出中没有超过整型范围的整数。
#include<iostream>
#include<math.h>
using namespace std;
long long gcd(long long a, long long b) {
if (b == 0) return a;
else
return gcd(b, a%b);
}
int main() {
long long a1, a2, b1, b2;//a1为第一个数的分子,a2为第二个数的分母,b1为第二个数的分子,b2为第二个数的分母
scanf("%lld/%lld %lld/%lld", &a1, &a2, &b1, &b2);
int c1, c2;//结果的分子,结果的分母
for (int i = 0; i < 4; i++) {
if (a1 > a2) {
cout << a1 / a2 << " " << a1 % a2 << "/" << a2;
}
else if(a1==0){
cout <<"0";
}
else {
cout << a1 << "/" << a2;
}
//加减乘除符号,顺带算出结果的分子
if (i == 0) {
cout << " + ";
c1 = a1 * b2 + b1 * a2;
c2 = a2 * b2;//结果的分母
}
else if(i==1){
cout << " - ";
c1 = a1 * b2 - b1 * a2;
c2 = a2 * b2;//结果的分母
}
else if(i==2){
cout << " * ";
c1 = b1 * a1;
c2 = a2 * b2;//结果的分母
}
else {
cout << " / ";
c1 = a1 * b2;
c2 = a2 * b1;//结果的分母
}
int yue = gcd(abs(c1), c2);//算出结果分子分母的公约数
//约分
c1 /= yue;
if (c2 != 0) {
c2 /= yue;
}
//左括号
if (b1 < 0) {
cout << "(";
}
//第二个数
if (abs(b1) > b2) {
if (b1%b2 == 0) {//如果能直接除,写除完后的结果
cout << b1 / b2;
}
else{
cout << b1 / b2 << " " << b1 % b2 << "/" << b2;
}
}
else {
if (b1 == 0) {
cout << "0";
}
else {
cout << b1 << "/" << b2;
}
}
//右括号
if (b1 < 0) {
cout << ")";
}
cout << " = ";
if (i == 3) {
if (c2 == 0) {
cout << "Inf";
break;
}//else if()
}
if (c1 < 0 || c2<0) {
cout << "(";
}
if (abs(c1) > abs(c2)) {
if (abs(c1) % abs(c2) == 0) {
cout << c1 / c2 ;
}
else {
cout << c1 / c2 << " " << abs(c1) % c2 << "/" << c2;
}
}
else if(c1==0){
cout << c1;
}
else if(c1>0 && c2<0) {//可能是除法导致负号到分母上了
cout << "-";
cout << c1 << "/" << abs(c2);
}
else {
cout << c1 << "/" << c2;
}
if (c1 < 0 || c2<0) {
cout << ")";
}
cout << endl;
}
return 0;
}