思路:
設定兩個一維陣列分別儲存數和組號。設定乙個二維陣列,第一維的下標i表示組號,第二維的下標j表示數的大小,陣列的元素值表示第i組的j數的個數,這應用雜湊的思想。遍歷每一組資料完成二維陣列的賦值。然後分別對兩個一維陣列進行排序。最後分別遍歷每乙個組合不同且數不同的資料,訪問這些資料的組號和數作為下標的二維陣列元素的值,得到每個不同資料的個數並輸出。
解答:
#include #include #include using namespace std;
int main()
// 每乙個不同的數的個數都儲存到二維陣列中
for (int i = 0; i <= data_num - 1; i++)
// 獲取num陣列和team陣列裡面最大的數
int max_num = num[0];
int max_team = team[0];
for (int i = 1; i <= data_num - 1; i++)
int a[max_team + 1][max_num + 1]; // 維度的下標大小只能取到初始化設定的維度的大小-1,如max_num為8但第二維大小是8時下標只能取到7
memset(a, 0, sizeof(a));
for (int i = 0; i <= data_num - 1; i++)
// 不同數的個數前面已儲存,num陣列和team陣列不再需要一一對應,排序後只用來提供各個組號和數
sort(num, num + data_num);
sort(team, team + data_num);
// 遍歷每乙個不同的數,不同指組不同或數的大小不同
int prev_team = team[0]; // prev_team表示上一次的組號
for (int i = 0; i <= data_num - 1; i++)
if (prev_prev != num[j]) // 如果當前的數與上一次的不同,則更新
prev_prev = num[j];
}printf("}\n");
if (prev_team != team[i]) // 如果當前的組號與上一次的不同,則更新
prev_team = team[i];}}
} }return 0;
}
坑:
int a[max_team][max_num] = ;
a = ;
這種**仍然會提示「表示式必須是可修改的左值錯誤」,因為a儲存的是二維陣列的位址,是乙個常量,不能修改。最後使用memset進行二維陣列的初始化解決了問題。 《演算法筆記》codeup 5 4 A
時間限制 1 sec 記憶體限制 32 mb 提交 521 解決 186 提交 狀態 討論版 命題人 外部匯入 輸入乙個整數n 2 n 10000 要求輸出所有從1到這個整數之間 不包括1和這個整數 個位為1的素數,如果沒有則輸出 1。輸入有多組資料。每組一行,輸入n。輸出所有從1到這個整數之間 不...
《演算法筆記》codeup 5 5 A
時間限制 1 sec 記憶體限制 32 mb 提交 353 解決 242 提交 狀態 討論版 命題人 外部匯入 求1 n內的完數,所謂的完數是這樣的數,它的所有因子相加等於它自身,比如6有3個因子1,2,3,1 2 3 6,那麼6是完數。即完數是等於其所有因子相加和的數。測試資料有多組,輸入n,n資...
演算法筆記 Codeup 100000567A
題目要求 求一元二次方程ax2 bx c 0的根,三個係數a,b,c由鍵盤輸入,且a不能為0,但不保證b2 4ac 0。程式中所涉及的變數均為double型別。要求輸入 以空格分隔的一元二次方程的三個係數,雙精度double型別 樣例1 2 3要求輸出 分行輸出兩個根如下 注意末尾的換行 r1 第乙...