2014藍橋杯--神奇算式

這道題嚴格來說不是一道難題,期間的思路是字符串與數字之間的轉換和組合,剛開始不會用字符串轉換的幾個函數,用判斷數字是幾位數然後拆分比較的方法,試了幾次結果不對,後來看別人的代碼瞭解了sprintf,strcat,strcmp,的使用方法,然後結合自己的思路A了。

題意:

由4個不同的數字,組成的一個乘法算式,它們的乘積仍然由這4個數字組成。
比如:
6 x 210 = 1260
8 x 473 = 3784
27 x 81 = 2187
都符合要求。
如果滿足乘法交換律的算式算作同一種情況,那麼,包含上邊已列出的3種情況,請輸出剩餘的滿足要求的算式且按照第一個因數從小到大排列,第一個因數相等,按照第二個因數從小到大排列

本題意義:學習幾個字符串處理函數的使用

思路:利用雙重for循環來解決輸入問題,並判斷乘積是否4位數,然後進行數與字符串的轉換比較,按要求輸出結果

代碼解釋:

#include <iostream>
#include <algorithm>
#include <string.h>
using namespace std;
int main()
{
int i,j,sum,k;
char s1[4], s2[4],s3[6];
for(i=1;i<=999;i++) //兩個數相乘,其中一個必定不超過4位數
{
for(j=1;j<=999;j++)
{
sum=i*j;
if(sum>=1000&&sum<=9999&&i<j) //確定乘積是一個四位數
{
if((i==6&&sum==1260)||(i==8&&sum==3784)||(i==27&&sum==2187)) //判斷條件中已經給出的,不再輸出
continue;
sprintf(s3,"%d",sum); //把乘積轉換爲字符串,並排序
sort(s3,s3+4);         
k=1;
for(;k<4;k++) //判斷乘積字串中的數都不相同
{
if(s3[k-1]==s3[k])
break;
}
if(k==4)       //如果乘積是由四個不同的數字組成
{
sprintf(s1,"%d",i); //把第一個數轉換爲字串
sprintf(s2,"%d",j); //把第二個數轉換爲字串
strcat(s1,s2);      //把兩個字串合併爲一個
sort(s1,s1+4);      //排序
if(strcmp(s1,s3)==0) //比較兩個字串是否相同,如果相同則輸出
printf("%d * %d = %d\n",i,j,sum);
}
}
}
}
return 0;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章