1.求“相亲数”
即输入两个正整数a和b,若a的所有约数(包括1,不包括a本身)的和,等于b,且b的所有约数(包括1,不包括b本身)的和等于a,则两个数是相亲数。要求分别输出两个正整数的约数和的式子,再换行输出1或0,表示这两个数是否为相亲数。
输入:220 284
输出
220,1+2+4+5+10+20+22+44+55+110=284
284,1+2+4+71+142=220
1
#include "stdafx.h"
#include <iostream>
#include <string>
#include "math.h"
#include "stdio.h"
#include "string.h"
#include <vector>
#include <queue>
#include <map>
#include <algorithm>
using namespace std;
void yueshu(int n,int *result,int &num){
num=0;
result[num++]=1;
for(int i=2;i<sqrt(n);i++){
if(n%i==0) {
result[num++]=i;
result[num++]=n/i;
}
}
sort(result,result+num);
}
int main(int argc, char* argv[])
{
int n1,n2;
int result1[100],result2[100];
int num1,num2;
int sum1=0,sum2=0;
int i;
scanf("%d %d",&n1,&n2);
yueshu(n1,result1,num1);
cout<<n1<<",";
for(i=0;i<num1-1;i++){
cout<<result1[i]<<"+";
sum1+=result1[i];
}
sum1+=result1[num1-1];
cout<<result1[num1-1]<<"="<<sum1;
cout<<endl;
cout<<n2<<",";
yueshu(n2,result2,num2);
for(i=0;i<num2-1;i++){
cout<<result2[i]<<"+";
sum2+=result2[i];
}
sum2+=result2[num2-1];
cout<<result2[num2-1]<<"="<<sum2;
cout<<endl;
if(sum1==n2&&sum2==n1) cout<<"1";
return 0;
}
2.模拟鼠标点击桌面时桌面窗口的叠放次序
先输入一个数字n,表示桌面窗口的数量,再输入n行,每行5个数,分别为窗口ID,窗口左下横坐标,左下角纵坐标,右上角横坐标,右上角纵坐标(坐标均以平魔左下角为0点),先输入的窗口叠放在后输入的窗口上面。再输入m行,表示m次点击,每行两个数,分别表示点击的横坐标和纵坐标,要求按窗口叠放顺序从高到低输出窗口ID.
输入
2
1 5 1 1 5
2 7 1 3 5
3
1 2
4 3
6 4
输出 2 1
#include "stdafx.h"
#include <iostream>
#include <string>
#include "math.h"
#include "stdio.h"
#include "string.h"
#include <vector>
#include <queue>
#include <map>
#include <algorithm>
using namespace std;
struct point{
int x,y;
};
struct rect{
int id;
point zx,ys;
};
rect windows[100];
int n,m;
int dianji(point p){
int result=0;
for(int i=0;i<n;i++){
if(p.x>=windows[i].zx.x&&p.x<=windows[i].ys.x&&p.y>=windows[i].zx.y&&p.y<=windows[i].ys.y)
return i;
}
return -1;
}
void movetop(int index){
rect r=windows[index];
for(int i=index-1;i>=0;i--)
windows[i+1]=windows[i];
windows[0]=r;
}
void print(){
for(int i=0;i<n;i++){
cout<<windows[i].id<<" ";
}
cout<<endl;
}
int main(int argc, char* argv[])
{
int i;
point p;
int index;
scanf("%d",&n);
for(i=0;i<n;i++){
scanf("%d %d %d %d %d",&windows[i].id,&windows[i].zx.x,&windows[i].zx.y,&windows[i].ys.x,&windows[i].ys.y);
}
//print();
scanf("%d",&m);
for(i=0;i<m;i++){
scanf("%d %d",&p.x,&p.y);
index=dianji(p);
//cout<<index<<endl;
if(index!=-1){
movetop(index);
// print();
}
}
print();
return 0;
}
3.统计词语
输入一段含标点的英文语段(若干行,以ctrl+z结束),统计这段话出现的所有词语,并按照字典顺序输出所有词语,每输出一个词换一行
#include "stdafx.h"
#include <iostream>
#include <string>
#include "math.h"
#include "stdio.h"
#include "string.h"
#include "ctype.h"
#include <vector>
#include <queue>
#include <map>
#include <algorithm>
using namespace std;
struct wordType{
char word[30];
int count;
bool operator <(const wordType w){
if(strcmp(word,w.word)<0) return 1;
else return 0;
}
};
int wordcount=0;
wordType w[100];
int findstr(char *str){
for(int i=0;i<wordcount;i++){
if(strcmp(str,w[i].word)==0) return i;
}
return -1;
}
int main(int argc, char* argv[])
{
int cindex=0,windex=0;
char c,str[30];
while(scanf("%c",&c)!=EOF){
if(isalpha(c)){
str[cindex++]=c;
}
else{
str[cindex]=0;
if(cindex==0) continue;
cindex=0;
//cout<<str<<endl;
windex=findstr(str);
if(windex!=-1){
w[windex].count++;
}else{
wordType tmp;
strcpy(tmp.word,str);
tmp.count=1;
w[wordcount++]=tmp;
}
}
}
sort(w,w+wordcount);
for(int i=0;i<wordcount;i++)
cout<<w[i].word<<":"<<w[i].count<<endl;
return 0;
}