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;
}